Gnuplot:让您的数据拥有完美曲线

来源:互联网 发布:ccer经济金融数据库 编辑:程序博客网 时间:2024/06/04 18:48

Gnuplot是一个开源的跨平台的图形生成工具,基于命令行的界面,基于状态的特点让其使用非常的简单,本文将具体的介绍如何使用Gnuplot来生成一些运营日报中常见的图形。运营日报一般都是用邮件的形式来发送的,邮件限制了运营日报里的图形无法使用基于javascript和flash的图形库,因为在邮件里无法执行javascript和flash。下面我们步入正题,gnuplot正式登场。

Gnuplot简单示例

直接上图:

这是一个sin(x)曲线,是用下面的命令生成的:

set terminal png size 1000,400set output "./sin.png"plot sin(x)
上面提到过gnuplot是基于命令行的,gnuplot的命令分为2种,一种是修改状态的,一种是画图的指令。上面代码的第一行,修改终端类型为png,并且png图片的大小为1000px*400px,gnuplot默认的终端类型是unknown,所以这里我们要指定终端的类型为png。第二行指定png图片的输出路径。第三行是个指令命令,画sin(x)。类似的指令命令还有replot、multiplot等。

在使用gnuplot的过程中,如果对命令有疑问的话,可以通过在gnuplot的命令行界面下输入help来获取帮助信息,比如help set terminal将输出下面的帮助信息:

gnuplot> help set terminal `gnuplot` supports many different graphics devices.  Use `set terminal` to tell `gnuplot` what kind of output to generate. Use `set output` to redirect that output to a file or device. Syntax:       set terminal {<terminal-type> | push | pop}       show terminal
由于帮助信息比较长,这里只截取了最上面的部分。

gnuplot点图

继续我们的gnuplot之旅,这次我们画个点图,这些点取得都是随机数,见下图:


代码如下:

set terminal png font "./msyh.ttf" size 1000,400set output "./random.png"set xdata timeset timefmt "%Y-%m-%d %H:%M" set format x "%H:%M"set ylabel "随机数" offset graph 0.1,graph 0.57 rotate by 0 set gridset title "2014-10-13 随机数分布"plot "./random.data" using 1:3 title ""
由于在这个图中含有中文,因此我们需要指定支持中文的终端字体,这里我们用的是微软雅黑;我们random.data的数据格式是2014-10-13 00:00 9664,一共24 * 60+ 1行(因为最后的一个点也需要一个数据,所以这里一共有1441行的数据),set xdata time指定x轴数据的格式是时间格式,并且random.data文件中的时间格式是"%Y-%m-%d %H:%M"(2014-10-13 00:00),但显示的时候只需要小时和分钟的数据,这个通过set format x "%H:%M"来指定x轴日期显示的格式;下一行set ylabel设置y轴坐标的名称;set grid显示网格;set title指定标题;最后一行用random.data的第一列和第三列来生成图形(时间占了两列)。非常简单是不是,下面我们再看下其它的图形样式。

gnuplot24小时曲线

在运营日报中,我们通常需要画24小时的曲线,比如游戏的在线人数曲线,登录/登出用户数曲线,QPS曲线等,见下图:


这类折线图具有简洁清晰的特点,比如在上图中,我们可以很明显的看到在12:00这个时刻有个突起。画这类图形的代码如下:

set terminal png font "./msyh.ttf" size 1000,400set output "./day_single_line_20141013.png"set xdata timeset timefmt "%Y-%m-%d %H:%M" set format x "%H:%M"set ylabel "QPS (个)" offset graph 0.1,graph 0.57 rotate by 0 <span style="color:#FF0000;">set xtics 7200</span>set gridset title "2014-10-13 某数据曲线"plot "./day_single_line_20141013.data" using 1:3 title "" <span style="color:#FF0000;">with lines</span>
这个图形和上一个很类似,关键的地方我已用红色标出:set xtics 7200设置网格的x轴间隔2个小时;with lines指定我们要画的是折线图。

gnuplot24小时对比曲线

有时候我们想拿今天的运营情况和昨天做个对比,其实这个很简单:

对应的代码如下:

set terminal png font "./msyh.ttf" size 1000,400set output "./day_double_line_20141013.png"set xdata timeset timefmt "%Y-%m-%d %H:%M" set format x "%H:%M"set ylabel "QPS (个)" offset graph 0.1,graph 0.57 rotate by 0 set xtics 7200set gridset title "某数据曲线"<span style="color:#FF0000;">set key right top</span>plot "./day_double_line_0_20141013.data" using 1:3 title "2014-10-13" with lines, "./day_double_line_1_20141013.data" using 1:3 title "2014-10-14" with lines
set key right top指定曲线的名称位置为右上角;注意最后一行plot,直接画了2条曲线。

gnuplot24小时双坐标曲线

一张图中画两条曲线,可以让图承载更多的信息,但有时候这两个图的数据相差很大,如果放到同一个坐标轴的话,必然会有一条曲线效果不明显。gnuplot24小时双坐标曲线应运而生,见下图:

如上图,左边是QPS曲线,右边是成功率曲线,perfect!代码如下:

set terminal png font "./msyh.ttf" size 1000,400set output "./day_double_line_different_axes_20141013.png"set xdata timeset timefmt "%Y-%m-%d %H:%M" set format x "%H:%M"set ylabel "QPS (个)" offset graph 0.1,graph 0.57 rotate by 0  textcolor lt 1set y2label "成功率 (%)" offset character -7,graph 0.57 rotate by 0 textcolor lt 2set ytics textcolor lt 1set y2tics textcolor lt 2set y2range [0:110]set xtics 7200set grid<span style="color:#FF0000;">set border 31-8-2 lt -1set object 1 rectangle from graph 0.998,graph 0 to graph 1,graph 1 lw 1 fs empty border lc lt 2set object 2 rectangle from graph 0,graph 0 to graph 0.002,graph 1 lw 1 fs empty border lc lt 1</span>set title "2014-10-13 某数据曲线"set key right topplot "./day_double_line_0_20141013.data" using 1:3 title "QPS" with lines axes x1y1, "./day_double_line_0_20141013_200.data" using 1:3 title "成功率" with lines axes x1y2
注意红色的代码,第一行是设置不显示左边和右边的border(为什么是31-8-2请参考帮助文档help set border);第二行和第三行分别画后边和左边的border(其实是一个宽度很小矩形)。

Okay,24小时的曲线我们就讲到这里,下面我们来看下月度曲线,比如最近一个月的每天登录人数曲线。

gnuplot月度曲线


请忽略图形中的数据~~这里的数据是楼主随手写的,所以曲线有点奇怪。代码如下:

set terminal png font "./msyh.ttf" size 1000,400set output "./month_single_line_20141013.png"set xdata timeset timefmt "%Y-%m-%d" set format x "%m-%d"set ylabel "某数据 (个)" offset character 7,graph 0.57 rotate by 0 #set xtics 172800set xtics "2014-09-13",259200set xrange ["2014-09-13":"2014-10-13"]#set yrange [0:]set gridset title "2014-10-13 某数据曲线"plot "./month_single_line_20141013.data" using 1:2 title "" with lines
gnuplot其它的月度曲线和24小时曲线类似,这里我就不多说了,感谢您的阅读,欢迎评论,谢谢。

0 0