gnuplot: 一种更为简洁的曲线,柱状图绘图软件
gnuplot: 一种更为简洁的曲线,柱状图绘图软件
Zhong Xiewei
Wed Jun 25
gnuplot简单介绍
关于gnuplot的简单性认识可以通过百度百科,上面介绍了在windows以及linux下如何安装该命令行交互式绘图工具。该工具的使用使得数据处理和图形绘制,成为了两个相对独立的内容,可以更好的将注意力集中到数据处理或是图形的绘制。
各种绘图示例
在一般的数据处理中经常需要绘制的图形有以下几类:
- 散点图
- 曲线图
- 柱状图
另外经常还会改变图形的各种属性,如:文字大小,曲线大小,曲线颜色,散点类型,散点大小,坐标刻度,坐标轴标识,添加误差bar,设置图形大小,图形分辨率,在图像中添加文字,图像绘制,colorbar设置等等。
下面先来介绍一下线的粗细,点的类型,箭头的方向,文字位置等的示例内容。
散点图
# 文件名:spectrum.txt
# 示例光谱数据
500.0000 24.3323
501.0000 24.4242
502.0000 24.3711
503.0000 24.4060
504.0000 24.3026
505.0000 24.3572
506.0000 24.4649
507.0000 24.3331
508.0000 24.3422
509.0000 24.3661
... ...
接下来就用gnuplot来进行绘制:
plot "spectrum.txt" using 1:2 with points
得到的结果如下:
从绘图的命令行中,我们可以看到使用gnuplot的命令就像直接使用了英文进行表述的。翻译成中文就是:从文件spectrum.txt中取得第一行和第二行的数据,采用散点的方式进行绘制。上面的图中,得到的三点是由加号表示的,那么如果要选用别的类型的点呢。在第一个图中,已经给出了不同类型的点代表的数字。那么只要在命令行后面添加pointtype 6
即可。此时完整的命令为:
plot "spectrum.txt" using 1:2 with points pointtype 6
如果要将右上角的文字替换为“example”,增加title "example"
即可。
plot "spectrum.txt" using 1:2 title "example" with points pointtype 6
要额外的添加横坐标,纵坐标的标示呢。
set xlabel "Wavelength [nm]"
set ylabel "Reflectance Intensity"
plot "spectrum.txt" using 1:2 title "example" with points
那么绘制两条曲线呢,只要在绘图plot的那一行的末尾添加相应的绘制内容即可。
set xlabel "Wavelength [nm]"
set ylabel "Reflectance Intensity"
plot "spectrum.txt" using 1:2 title "example1" with points pointtype 6, "" using 1:($2+3) title "example2" with points pointtype 6
结果如下所示:
曲线图
曲线图的绘制和散点图类似,只要将上述命令行中的with points
更改为with lines
即可。
柱状图
假设有一组如下的数据:
# file: data.txt
# Year Red Green Blue
1990 33 45 18
1991 35 42 19
1992 34 44 14
1993 47 15 30
1994 41 14 32
1995 42 20 35
那么如何对该数据进行绘制呢。比较好的展示方式就是分组的bar图。通过上面两个例子,很容易想到具体的绘制命令的更改应该将with lines改成相应的with histograms。确实如此,但是只是采用这样的方式,得到的结果的美观性还有所欠缺。命令以及结果如下:
plot "data.txt" using 2 title "Red" with histograms, "" using 3 title "Green" with histograms, "" using 4 title "Blue" with histograms
绘制的结果为:
为了增加美观性,需要在绘制之前对格式进行一定的设定。
# bar1
set style fill solid
set palette rgbformulae 7,5,15
plot "data.txt" using 2 title "A" w histograms palette frac 0.1, "" u 3 t "B" w histograms palette frac 0.5, "" u 4 t "C" w histograms palette frac 0.9
# bar3
set style fill solid
set palette rgbformulae 3,11,6
plot "data.txt" using 2 title "a" w histograms palette frac 0.1, "" u 3 t "b" w histograms palette frac 0.5, "" u 4 t "c" w histograms palette frac 0.9
# bar3
set style fill solid
set palette rgbformulae 33,13,10
plot "data.txt" using 2 title "a" w histograms palette frac 0.1, "" u 3 t "b" w histograms palette frac 0.5, "" u 4 t "c" w histograms palette frac 0.9
bar1: bar2: bar3:
可见很容易绘制出不同颜色的bar图。另外发现图中的横坐标的刻度没有和年份对应起来,想要实现这个改变其实是很简单的事情。
set style fill solid
set palette rgbformulae 7,5,15
plot "data.txt" using 2:xtic(1) title "A" w histograms palette frac 0.1, "" u 3 t "B" w histograms palette frac 0.5, "" u 4 t "C" w histograms palette frac 0.9
还有一种常见的绘图就是在各个柱状图上面添加相应的errorbar。那么上述的数据将进行更改。如下:
# file: data.txt
# Year Red Rederror Green Greenerror Blue Blueerror
1990 33 2 45 4 18 3
1991 35 4 42 3 19 2
1992 34 3 44 6 14 2
1993 47 2 15 2 30 3
1994 41 5 14 2 32 2
1995 42 4 20 4 35 2
实现的命令如下:
set style fill solid
set palette rgbformulae 7,5,15
unset colorbox
set style histogram errorbars lw 2
plot "data.txt" using 2:3:xtic(1) title "A" w histograms palette frac 0.1, "" u 4:5 t "B" w histograms palette frac 0.5, "" u 6:7 t "C" w histograms palette frac 0.9
最后的结果为:
结果导出
这一步借用了一个单个的命令文件,内容如下:
set terminal push # 将终端的命令暂时保存
set terminal postscript eps size 8cm, 6cm color solid # 设置导出的文件格式,尺寸
set output "$0"
replot # 重新绘制图形
set output # 恢复到最初设置
set terminal pop
在终端使用:call "export.gp" "result.ps"
,就能够获得最终导出的图像。将ps格式的图形转换成一定分辨率其他格式的图形,可以使用’imagemagick convert’软件,采用的命令如:convert -density 300x300 result.ps result.png