gnuplot: 一种更为简洁的曲线,柱状图绘图软件

时间:2024-03-05 22:57:54

gnuplot: 一种更为简洁的曲线,柱状图绘图软件

gnuplot简单介绍

关于gnuplot的简单性认识可以通过百度百科,上面介绍了在windows以及linux下如何安装该命令行交互式绘图工具。该工具的使用使得数据处理和图形绘制,成为了两个相对独立的内容,可以更好的将注意力集中到数据处理或是图形的绘制。

各种绘图示例

在一般的数据处理中经常需要绘制的图形有以下几类:

  1. 散点图
  2. 曲线图
  3. 柱状图

另外经常还会改变图形的各种属性,如:文字大小,曲线大小,曲线颜色,散点类型,散点大小,坐标刻度,坐标轴标识,添加误差bar,设置图形大小,图形分辨率,在图像中添加文字,图像绘制,colorbar设置等等。

下面先来介绍一下线的粗细,点的类型,箭头的方向,文字位置等的示例内容。

Example

Example

散点图

# 文件名: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

得到的结果如下:

spectrum image

spectrum image

从绘图的命令行中,我们可以看到使用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

结果如下所示:

two spectrum

two spectrum

曲线图

曲线图的绘制和散点图类似,只要将上述命令行中的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

绘制的结果为:

bar

bar

为了增加美观性,需要在绘制之前对格式进行一定的设定。

# 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: bar1 bar2: bar2 bar3: 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
bar4

bar4

还有一种常见的绘图就是在各个柱状图上面添加相应的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

最后的结果为:

bar5

bar5

结果导出

这一步借用了一个单个的命令文件,内容如下:

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

进一步的资料

  1. 《gnuplot in action》,《gnuplot cookbook》,《gnuplot manual》,见传送门
  2. 官网上的各种示例