Skip to content

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

在第一期的plot sin(x)代码中,我们图表,函数sintan,轴x,y分别单独命名。本期我们将介绍使用 set titleset xlabelset ylabel 添加图表标题和坐标轴说明(包括单位和含义)。

一、标题与标签

标题概括图表核心内容,坐标轴标签说明变量与单位,两者不仅提升可读性、避免误解,也是满足学术或技术出版要求的必要元素。

在这里Shift+Enter是换行

基本语法

  1. set title

该命令用于设置显示在图表正上方的标题。

bash
set title {"标题文本"} {选项}

标题文本:用引号括起来的字符串。

  1. set xlabelset ylabel

这两条命令分别设置 X 轴和 Y 轴的说明文字。为了让信息更完整,建议在标签中包含单位。

bash
set xlabel {"轴标签文本"} {选项}
set ylabel {"轴标签文本"} {选项}

小技巧:Gnuplot 支持增强文本模式(Enhanced text),可以通过添加特殊语法实现上下标、希腊字母等。例如,set ylabel "温度 ({}^\\circ C)" 可以显示摄氏度符号。不过,在 LiiiSTEM 环境中,您也可以直接使用 Unicode 字符,如

标题设置详解

  1. 基本标题

最简单的形式就是直接添加文本:

bash
set title "正弦波函数"
plot sin(x)

效果:图表上方显示“正弦波函数”。

  • 字体控制

可以使用 font 选项指定字体名称和大小:

bash
set title "正弦波函数" font "Times,20"

字体名称取决于系统支持的字体(如 “Arial”、“Times”、“Helvetica”),字号以点(pt)为单位。

  • 文本颜色

通过 textcolor(简写 tc)设置颜色:

bash
set title "重要结果" textcolor rgb "red"

颜色可以用颜色名称(如 “red”、“blue”)、RGB 十六进制(如 “#FF0000”)或颜色变量表示。

  • 标题位置

默认标题位于图表上方居中。可以通过 offset 微调位置:

bash
set title "偏移标题" offset 0, -1   # 向下偏移 1 个字符高度

offset 后面跟两个数值:水平偏移(字符宽度为单位)、垂直偏移(字符高度为单位)。正值向右/向上,负值向左/向下。

  • 多行标题

如果需要多行标题,可以在文本中使用换行符 \n

bash
set title "第一行\n第二行"

注意:换行符在部分终端中可能需要转义,建议用双引号括起来。

坐标轴标签设置

  1. 基本标签
bash
set xlabel "时间 (s)"
set ylabel "速度 (m/s)"
plot 'data.txt' using 1:2

效果:x 轴下方显示“时间 (s)”,y 轴左侧显示“速度 (m/s)”。

  • 包含单位和含义

在科学绘图中,标签通常包含变量名和单位,例如:

  • “温度 (K)”

  • “压力 (Pa)”

  • “浓度 (mol/L)”

确保单位使用标准符号,并用括号括起来,与变量名之间留一个空格(如“温度 (K)”),这是常见的规范。

  • 字体与颜色

与标题类似,可以使用 fonttextcolor 选项:

bash
set xlabel "频率 (Hz)" font "Arial,14" textcolor rgb "blue"
  • 位置微调

有时标签可能太靠近坐标轴数字,可以使用 offset 调整距离:

bash
set xlabel "时间 (s)" offset 0, 1   # 向下移动一点(正垂直偏移)
set ylabel "振幅" offset 2, 0       # 向右移动一点

注意:对于 y 轴标签,默认位置是左侧垂直居中。偏移量可根据需要调整。

  • 旋转标签

如果标签文字过长,可以旋转以节省空间:

bash
set ylabel "非常长的坐标轴标签" rotate by 90

rotate by 角度 可以让标签旋转指定度数(通常 90 度用于纵轴,但 Y 轴默认已经是纵向,旋转 0 度可变为水平)。

特殊字符与格式化

科学绘图常需要希腊字母、上标/下标、数学符号等。Gnuplot 支持通过 Enhanced 文本模式(多数终端默认开启)使用类似 LaTeX 的语法。

  1. 常用特殊符号
  • 希腊字母:使用 {/Symbol 字母名},例如 {/Symbol a} 显示 α,{/Symbol b} 显示 β。或者直接使用 Unicode(需终端支持)。

  • 上标:x^2 显示 x2x^2x^{y+z} 显示 xy+zx^{y+z}

  • 下标:x_2 显示 x_2x\_2x_{i+1} 显示 x_i+1x\_{i+1}

  • 组合:可以混合使用,如 T_{c}^{2} 显示 T_c2T\_{c}^{2}

示例:

bash
set xlabel "温度 (°C)"   # 显示摄氏度符号
set ylabel "吸收系数 ({/Symbol a}) (cm^{-1})"
  • 常见示例
效果代码
速度 (m/s)"速度 (m/s)"
温度 (K)"温度 (K)"
角度 (θ)"角度 ({/Symbol q})"
应力 (σ)"应力 ({/Symbol s})"
面积 (m²)"面积 (m^2)"
体积 (cm³)"体积 (cm^3)"
浓度 (mol/L)"浓度 (mol/L)"

二、图例管理

在 Gnuplot 中,图例(Key)是图表的重要组成部分,用于标识每条曲线的含义。本文将详细介绍如何通过 set key 命令灵活控制图例的位置与样式,以及如何使用 title 选项为每条曲线指定名称。

图例位置控制

  1. 基本位置关键词

Gnuplot 提供了直观的关键词来快速定位图例 :

命令示例效果
set key left图例位于图形左侧
set key right图例位于图形右侧(默认)
set key top图例位于图形顶部
set key bottom图例位于图形底部
set key center图例位于图形中央
  • 组合位置

关键词可以组合使用,实现更精确的定位 :

bash
set key top left        # 左上角
set key top right       # 右上角(默认)
set key bottom left     # 左下角
set key bottom right    # 右下角
set key center right    # 右侧居中

图例样式美化

  1. 边框控制
bash
set key box             # 显示边框
set key nobox           # 隐藏边框(默认)
set key box lw 2 lc rgb "gray50"  # 边框线宽2,灰色
  • 背景与透明
bash
set key box opaque       # 不透明背景(遮盖后面的图形)
set key box transparent  # 透明背景
  • 图例条目样式
bash
set key spacing 1.5     # 条目之间的行间距(默认1.25)
set key width 2         # 图例框宽度
set key height 1        # 图例框高度
set key samplen 2       # 图例中样例线条的长度(默认4)

可以通过 samplen 调整样例线的长度,如果默认的线条长度不足以清楚显示线型(如虚线),可以适当增大该值 。

  • 文本与对齐
bash
set key font "Times,12"         # 设置字体和大小
set key textcolor rgb "blue"    # 设置文字颜色
set key Left                     # 文本左对齐(注意大写L)
set key reverse                  # 交换样例线和文本的位置
set key reverse Left            # 文本左对齐且样例线在右侧

reverse 通常与 Left 结合使用,让曲线名称出现在样例线之后,文本向左对齐 。

  • 图例标题

可以为整个图例添加标题 :

bash
set key title "曲线说明"                # 简单标题
set key title "Powers of x" font "Helvetica,16"  # 带字体设置的标题

需要注意的是,如果同时启用 box 和标题,有时会发生对齐冲突,可能需要调整 。

定制曲线名称

  1. 基本用法

plot 命令中,使用 title 为每条曲线指定图例名称 :

bash
plot sin(x) title "正弦曲线", \
     cos(x) title "余弦曲线"

如果不想让某条曲线出现在图例中,使用 notitle

bash
plot sin(x) notitle, cos(x) title "余弦曲线"  # 第一条曲线无图例
  • 使用数据文件中的列标题

如果数据文件的第一行包含列名称,可以自动将其作为图例标题 :

bash
# 数据文件 data.csv 第一行为:Time Temperature Pressure
plot 'data.csv' using 1:2 title columnhead(2), \
     'data.csv' using 1:3 title columnhead(3)

更简洁的方式是设置全局选项:

bash
set key autotitle columnhead    # 自动使用列标题作为图例
plot 'data.csv' using 1:2, '' using 1:3
  • 动态生成标题

在循环绘图中,可以动态构建标题 :

bash
plot for [i=2:6] 'datafile' using i title "第".i."列数据"

或者使用列标题:

bash
plot for [i=2:6] 'datafile' using i title columnhead(i)
  • 引用说明

title 后的文本可以是:

  • 带引号的字符串title "实验数据"

  • 字符串表达式title sprintf("T=%dK", temp)

  • 特殊值title columnhead(N)使用第N列的第一行作为标题

三、坐标轴范围

默认情况下 Gnuplot 会自动设定坐标轴范围,但在聚焦局部细节、剔除异常值、统一多图比例或追求美学效果时,手动调整范围更为合适。

基本语法

  1. set xrangeset yrange

语法为:

bash
set xrange [最小值:最大值]
set yrange [最小值:最大值]

范围可以留空,表示自动。例如,将 X 轴范围限定在 0 到 6,Y 轴从 0 开始:

bash
set xrange [0:6]
set yrange [0:*]   # 最小值固定为0,最大值自动

注意:设置范围时要确保所有数据点仍在可视区域内,否则部分曲线可能被裁剪。

  • 恢复自动缩放

如果想回到自动范围,可以使用:

bash
set xrange restore   # 恢复上一次手动设置前的自动范围
set autoscale x      # 明确开启 x 轴自动缩放

或者直接不加参数:

bash
set xrange [*:*]     # * 表示自动
  • 反向轴

可以通过将最小值大于最大值来实现坐标轴反向:

bash
set xrange [10:0]    # x 轴从 10 到 0(反向)

这在某些特殊绘图(如深度剖面)中很有用。

进阶用法

  1. 相对范围

有时我们希望坐标轴范围相对于数据的最大值/最小值进行扩展或收缩,可以使用 * 配合偏移:

bash
set xrange [*:10]    # 最小值自动,最大值固定为 10
set yrange [-2:*]    # 最小值固定 -2,最大值自动
set xrange [*:*]     # 完全自动(等同于恢复自动缩放)

还可以使用 set offsets 在自动范围基础上增加边距:

bash
set offsets 1, 1, 0.1, 0.1   # 左、右、下、上额外留出的空白

offsets 会在自动计算的范围上增加边距,避免曲线紧贴边框。

  • 对数坐标轴

如果使用对数坐标(set logscale),设置范围时需注意数值应为正数:

bash
set logscale yset yrange [1e-2:1e2]   # 对数轴,范围从 0.01 到 100
  • 三维绘图

对于三维图(splot),还有 set zrange 控制 z 轴范围,用法完全相同。

四、网格与边框

网格线能够极大地提升图表的可读性,帮助读者快速估算数据点的数值。

最简单的用法是:

bash
set grid

默认情况下,set grid 会在主刻度位置绘制灰色虚线网格。您还可以进一步定制网格的样式和密度:

bash
set grid xtics ytics   # 明确指定在 X 和 Y 主刻度上绘制网格
set grid mxtics mytics # 同时在次刻度上绘制更细的网格

五、实战练习:将第 3 期的图表进行全面的美化包装。

现在,我们将应用以上所有美化技巧,对上一期教程中的实验测量数据图表进行一次全面的升级改造。

原始数据回顾(exp_data.txt 文件内容):

bash
1 2.3
2 4.1
3 5.5
4 4.8
5 7.2

任务:生成一幅标题清晰、坐标轴带单位、图例合理、坐标轴范围适当、带网格的专业折线图。

在 LiiiSTEM 中新建一个 Gnuplot 代码块,输入以下完整脚本:

bash
# ========== 全局设置 ==========
# 标题与坐标轴标签
set title "实验测量数据趋势图" font ",16"  # 设置字体大小(可选)
set xlabel "测量序号" font ",12"
set ylabel "数值 (m)" font ",12"

# 图例设置:放置在右下角,并添加浅色边框
set key bottom right box

# 坐标轴范围:X轴从0到6,Y轴从0到8(留出一点空白)
set xrange [0:6]
set yrange [0:8]

# 添加网格线(主刻度)
set grid

# ========== 自定义线条样式 ==========
# 定义样式1:红色线,圆形点,点大小为1.5,线宽2
set style line 1 lc rgb 'red' pt 7 ps 1.5 lw 2

# ========== 绘图 ==========
plot "exp_data.txt" using 1:2 with linespoints ls 1 title "测量值"

Liii STEM 中操作流程:

代码解析:

  • 标题与标签:图表上方显示了“实验测量数据趋势图”,X 轴和Y 轴分别标注了“测量序号”和“数值 (m)”,信息完整。

  • 图例:右下角出现了一个带框的图例,其中显示了“测量值”对应的红色线条和点的样式。

  • 坐标轴范围:X 轴从0到6(比实际数据稍宽),Y 轴从0到8(数据最大值7.2,留有余地),使得整个图表看起来更舒适。

  • 网格:灰色虚线网格均匀分布,极大地方便了数值的估算。

  • 线条样式:自定义的红色线条与圆点,线宽适中,视觉效果突出。

在 Liii STEM 中,您还可以继续对图表中的文字、线条进行点击编辑,微调位置和样式,实现完全符合要求的最终输出。

六、命令速查表

完整版参考:Gnuplot官网

命令功能示例
set title "..."设置图表标题set title "实验结果"
set xlabel "..."设置X轴标签set xlabel "时间 (s)"
set ylabel "..."设置Y轴标签set ylabel "位移 (m)"
set key <位置>控制图例位置set key top left
plot ... title "..."指定曲线图例名plot "data.dat" title "测量值"
set xrange [min:max]设置X轴范围set xrange [0:100]
set yrange [min:max]设置Y轴范围set yrange [-10:10]
set grid添加网格线set grid