Skip to content

美化图表—标题、坐标轴与图例

本期教程将带你深入 Gnuplot 的高级绘图功能,学会如何绘制多组数据对比、添加专业的误差线,以及通过自定义样式和标注来提升图表的表达力。我们将通过一个完整的实验数据案例,将这些技巧融会贯通。

一、绘制多曲线

在实际科研场景中,我们经常需要将多个数据序列或函数绘制在同一张图上进行对比。Gnuplot 的 plot 命令允许你通过逗号分隔一次性绘制多个元素。

同时绘制两个曲线

假设我们有两个实验数据文件 experiment1.txtexperiment2.txtexperiment1.txt表示直线 y = x的数据,experiment2.txt表示在直线附近加入了一些随机波动后的数据,用来模拟实验测量值。

  • 文件 experiment1.txt
plain
# 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
plain
# 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 参数设置图例。

bash
plot 'experiment1.txt' using 1:2 with lines title 'Sample A', \
     'experiment2.txt' using 1:2 with linespoints title 'Sample B'

同时绘制函数与数据

你也可以将函数和数据绘制在一起,例如将实验数据与理论模型进行对比:

bash
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),它既绘制数据点、连接线,也绘制垂直方向的误差条。

  1. 准备数据文件

使用 yerrorlines 样式时,你的数据文件通常需要包含三列,格式为:X坐标 Y坐标 Y误差。例如:

准备这样一份数据mydata.txt

plain
# 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
  • 绘制误差线

使用以下命令即可绘制带有误差线的图表:

bash
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 命令中直接指定线型和线宽。

bash
plot 'data1.dat' with lines lt 1 lw 3 title 'Series 1', \
     'data2.dat' with lines lt 2 lw 1 title 'Series 2'

这里,lt 1lt 2 代表使用预定义的第1号和第2号线型(通常是不同的颜色或虚线样式),lw 控制线的粗细。

自定义点类型(pointtype, pt)和点大小(pointsize, ps)

对于散点图或 linespoints 样式,点的样式至关重要。

bash
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 命令进行重新定义。例如:

plain
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 命令用于在指定位置添加文本。

bash
# 在坐标 (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 命令用于在两点之间绘制箭头。

bash
# 从 (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"

fromto 后面的坐标可以是绝对值,也可以是 graph(相对于绘图区域,范围0-1)等坐标系。

使用 set arrowset label 后,这些元素不会立即显示。它们只会在执行下一个 plotsplotreplot 命令后,才会被绘制到图形上。

五、实战练习:绘制带有误差带的科学实验对比图

让我们通过一个完整的案例,将上述技巧整合起来。假设我们测量了两种材料在不同温度下的电阻,并记录了测量误差,数据文件如下:

  • material_A.dat
plain
# 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.20
  • material_B.dat
plain
# 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

bash
# 设置终端和输出
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,你将得到一张高质量的科学对比图,其中包含了误差信息、清晰的样式区分以及关键的标注。

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