linux环境下根据统计数据生成柱状图文件

工作中有一项工作就是一个监视脚本,把数据的增量信息,每天以邮件的形式发送给相关人员,但是每天的增量信息并不能直观的带来可用信息,比较有用的是近一段时间数据的增长趋势。

如果描述近一段时间的增长趋势,比较直观的做法,就是生成图像,虽然email支持html,但是它毕竟不是在浏览器中浏览,没法使用一些画图js。最后想到的就是生成图片格式的文件。

根据数据生成图片文件,首先想到的是Graphviz,之前用过它的dot命令。可以生成流程图。仔细研究了下这个软件包,貌似它只局限于关系图的表达,并不擅长图表领域。

再继续找,便找到了大名鼎鼎的gnuplot。记得大学时候用的仿真软件RSOFT,都内带了这款画图软件,说明gnuplot在专业绘图领域还是很出名的。

简单的示例,生成一个柱状图。

数据文件 data.txt

1月 22
2月 23
3月 20
4月 26
5月 32
6月 13
7月 22
8月 23
9月 20
10月 26
11月 32
12月 42

再写个脚本文件:plot.sh

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
echo "
set terminal png truecolor
set output \"my.png\"
set grid
set style data histograms
set style fill solid 1.00 border -1
set xlabel \"date\"
set ylabel \"num\"
plot \"data.txt\" using 2:xtic(1) title \"my data\"
" | gnuplot

你也可以把echo的内容输入到一个文件里,然后使用gnuplot命令执行这个文件。
执行之后,生成的my.png文件如下,很不幸,不支持中文,不过网上有解决的方法。

gnuplot柱状图

备注:set terminal png truecolor 如果你使用的不是可视化界面,这句是需要的,否则它会尝试展示一个图像,而又不能打开窗口,从而报错。

留言

提示:你的email不会被公布,欢迎留言^_^

*

验证码 *