Appearance
美化图表—标题、坐标轴与图例
本期教程将带你深入 Gnuplot 的高级绘图功能,学会如何绘制多组数据对比、添加专业的误差线,以及通过自定义样式和标注来提升图表的表达力。我们将通过一个完整的实验数据案例,将这些技巧融会贯通。
一、绘制多曲线
在实际科研场景中,我们经常需要将多个数据序列或函数绘制在同一张图上进行对比。Gnuplot 的 plot 命令允许你通过逗号分隔一次性绘制多个元素。
同时绘制两个曲线
假设我们有两个实验数据文件 experiment1.txt 和 experiment2.txt。experiment1.txt表示直线 y = x的数据,experiment2.txt表示在直线附近加入了一些随机波动后的数据,用来模拟实验测量值。
- 文件
experiment1.txt
# X Y
0 0.0
1 1.0
2 2.0
3 3.0
4 4.0
5 5.0
6 6.0
7 7.0
8 8.0
9 9.0
10 10.0- 文件
experiment2.txt
# X Y
0 0.2
1 1.5
2 1.8
3 3.2
4 3.9
5 5.1
6 5.8
7 7.3
8 8.1
9 8.9
10 10.3我们想要对比它们的结果,运行一下命令会读取两个文件,分别用不同的样式绘制,并通过 title 参数设置图例。
plot 'experiment1.txt' using 1:2 with lines title 'Sample A', \
'experiment2.txt' using 1:2 with linespoints title 'Sample B'
同时绘制函数与数据
你也可以将函数和数据绘制在一起,例如将实验数据与理论模型进行对比:
f(x) = x
a = 2.5; b = 0.3
$data << EOD
0 0.2
1 1.5
2 1.8
3 3.2
4 3.9
5 5.1
6 5.8
7 7.3
8 8.1
9 8.9
10 10.3
EOD
plot $data using 1:2 with points title 'Observed', \
f(x) with lines title 'Fitted Model'
二、误差线
在实验科学中,数据的不确定性与数据本身同等重要。Gnuplot 提供了专门的绘图样式来处理误差线,其中最常用的是 yerrorlines(或 errorlines),它既绘制数据点、连接线,也绘制垂直方向的误差条。
- 准备数据文件
使用 yerrorlines 样式时,你的数据文件通常需要包含三列,格式为:X坐标 Y坐标 Y误差。例如:
准备这样一份数据mydata.txt
# X Y Yerror
1.0 2.3 0.2
2.0 2.8 0.3
3.0 3.2 0.25
4.0 3.9 0.4- 绘制误差线
使用以下命令即可绘制带有误差线的图表:
plot 'mydata.txt' using 1:2:3 with yerrorlines title 'Experimental Data'Gnuplot 会根据第三列的数据,在每个数据点 (x, y) 处,从 (x, y-ydelta) 到 (x, y+ydelta) 绘制一条垂直误差线,并在两端加上刻度。

- 其他误差线样式
除了 yerrorlines,Gnuplot 还支持其他误差样式以满足不同需求:
yerrorbars:仅绘制误差线,不连接数据点。xerrorbars/xerrorlines:用于显示水平方向的误差。xyerrorbars/xyerrorlines:同时显示 X 和 Y 两个方向的误差,数据文件需要包含X Y Xdelta Ydelta或更复杂的格式。
三、线条与点样式自定义
默认的线条和点样式有时难以满足出版要求,或者难以在黑白打印中区分。Gnuplot 允许我们进行精细的自定义。
自定义线型(linetype, lt)和线宽(linewidth, lw)
你可以在 plot 命令中直接指定线型和线宽。
plot 'data1.dat' with lines lt 1 lw 3 title 'Series 1', \
'data2.dat' with lines lt 2 lw 1 title 'Series 2'这里,lt 1 和 lt 2 代表使用预定义的第1号和第2号线型(通常是不同的颜色或虚线样式),lw 控制线的粗细。
自定义点类型(pointtype, pt)和点大小(pointsize, ps)
对于散点图或 linespoints 样式,点的样式至关重要。
plot 'data.dat' with linespoints pt 7 ps 1.5 title 'Data Points'pt 7 通常代表实心圆点,ps 控制点的大小。你可以通过 test 命令查看当前终端支持的所有点类型。
自定义颜色可以通过多种方式指定:
预定义颜色名称:
lc rgb 'red'、lc rgb 'forest-green'十六进制RGB值:
lc rgb '#FFA07A'使用调色板:
lc palette frac 0.3
永久自定义线型
如果你希望每次启动 Gnuplot 都使用一套自己偏好的配色方案,可以在初始化文件(如 ~/.gnuplot)中使用 set linetype 命令进行重新定义。例如:
set linetype 1 lw 2 lc rgb "blue" pointtype 6
set linetype 2 lw 2 lc rgb "forest-green" pointtype 8此后,所有使用 lt 1 的地方都会默认显示为蓝色、线宽为2的线条。
四、箭头与标签
在图表上添加箭头和文字注释,可以帮助读者更快地抓住图表的核心信息。
添加标签(set label)
set label 命令用于在指定位置添加文本。
# 在坐标 (2.5, 3.0) 处添加一个标签
set label "Peak Position" at 2.5, 3.0
# 可以自定义标签的字体、大小和对齐方式
set label "Critical Point" at 4.0, 5.2 font "Times,14" textcolor rgb "red" right绘制箭头(set arrow)
set arrow 命令用于在两点之间绘制箭头。
# 从 (1, 2) 到 (3, 4) 绘制一个带箭头的线
set arrow from 1, 2 to 3, 4
# 绘制一个不带箭头的线段,并设置线型和线宽
set arrow from 0.5, 1.2 to 5.5, 1.2 nohead lt 2 lw 2 lc rgb "gray"from 和 to 后面的坐标可以是绝对值,也可以是 graph(相对于绘图区域,范围0-1)等坐标系。
使用
set arrow和set label后,这些元素不会立即显示。它们只会在执行下一个plot、splot或replot命令后,才会被绘制到图形上。
五、实战练习:绘制带有误差带的科学实验对比图
让我们通过一个完整的案例,将上述技巧整合起来。假设我们测量了两种材料在不同温度下的电阻,并记录了测量误差,数据文件如下:
material_A.dat
# Temp(K) R(ohm) dR
100 1.52 0.05
150 2.31 0.08
200 3.65 0.10
250 5.82 0.15
300 9.01 0.20material_B.dat
# Temp(K) R(ohm) dR
100 1.10 0.03
150 1.68 0.06
200 2.95 0.09
250 5.10 0.12
300 8.20 0.18我们希望绘制两张图的对比,并用箭头标注一个关键的温度点。以下是完整的 Gnuplot 脚本 compare.plt:
# 设置终端和输出
set terminal pngcairo enhanced font 'Arial,12' size 800,600
# 设置图表标题和坐标轴标签
set title 'Temperature Dependence of Resistance' font 'Arial,16'
set xlabel 'Temperature (K)'
set ylabel 'Resistance (Ohm)'
# 设置图例(key)的位置和样式
set key top left box 3
# 设置网格,便于阅读
set grid
# 定义坐标轴范围(可选)
set xrange [80:320]
set yrange [0:12]
# --- 添加标注 ---
# 在温度250K附近,标注一个关键区域
set label 'Onset of rapid increase' at 230, 6.5 font 'Arial,10' textcolor rgb 'dark-red'
# 绘制一个箭头指向B材料在250K的数据点
set arrow from 200, 5.8 to 245, 5.2 heads size 0.1,25 lw 2 lc rgb 'dark-red'
# 绘制第一个数据集:带有误差线,自定义线条为蓝色,点类型为方形
# 绘制第二个数据集:带有误差线,自定义线条为红色,点类型为三角形
plot 'material_A.txt' using 1:2:3 with yerrorlines \
title 'Material_A (with error)' \
lt 1 lw 2 lc rgb 'blue' pt 5 ps 1.2, \
'material_B.txt' using 1:2:3 with yerrorlines \
title 'Material_B (with error)' \
lt 1 lw 2 lc rgb 'red' pt 7 ps 1.2
# 重置输出(对于某些终端是必需的)
set output在终端中执行 gnuplot compare.plt,你将得到一张高质量的科学对比图,其中包含了误差信息、清晰的样式区分以及关键的标注。

通过掌握这些高级技巧,你的科研图表将不仅能展示数据,更能高效地传达复杂的信息和深刻的见解。