如何使用gnuplot在2D绘图中添加指定时间点的水平线?
在Gnuplot快照图中添加特定时间点的水平线
没问题!要在你用gnuplot绘制的快照热力图里,给特定的Snapshot/Time(y轴)位置添加水平线,有两种简单好用的方法,我给你详细说明:
方法一:使用set arrow命令(推荐)
这个方法可以灵活定义水平线的样式,并且不会干扰原有的绘图逻辑。set arrow能创建贯穿整个x轴范围的水平线,你可以自定义颜色、线型、线宽等属性。
比如你想在Snapshot 3和Snapshot 6的位置添加红色虚线和蓝色实线,只需要在plot命令前加入以下代码:
# 在y=3(Snapshot 3)位置添加红色虚线 set arrow 1 from graph 0, first 3 to graph 1, first 3 nohead lc rgb "#ff0000" lt 2 lw 2 # 在y=6(Snapshot 6)位置添加蓝色实线 set arrow 2 from graph 0, first 6 to graph 1, first 6 nohead lc rgb "#0000ff" lt 1 lw 2
参数说明:
graph 0/graph 1:表示水平线从x轴的最左端延伸到最右端first 3:指定水平线的y轴位置为3(对应你的Snapshot编号)nohead:去掉箭头(因为我们需要的是水平线,不是箭头)lc rgb "#ff0000":设置线的颜色(也可以用lc "red"这种直观的颜色名称)lt 2:设置线型(2是虚线,1是实线,3是点线等)lw 2:设置线宽(数值越大线越粗)
方法二:在plot语句中直接绘制水平线
如果你想把水平线和原绘图逻辑放在同一条plot命令里,可以直接添加水平线的绘制语句,用反斜杠换行保持代码整洁:
plot for [i=1:n] './snapshots/'. snapshot(n+1-i) using 1:2:3 with boxes linecolor palette, \ 3 with lines lc rgb "#ff0000" lt 2 lw 2, \ 6 with lines lc rgb "#0000ff" lt 1 lw 2
这里3 with lines就是绘制y=3的水平线,同样可以自定义样式。注意把水平线的语句放在后面,这样水平线会覆盖在盒子图上方,显示更清晰。
修改后的完整代码示例(以方法一为例)
set terminal pngcairo n=1000 # Number of snapshots load 'color.pal' # cbrange[-6:-2] unset key set style fill solid set ylabel "Snapshot/Time" set xrange[0:2021] set yrange[0:8] # 添加自定义水平线:根据你的需求修改y轴位置即可 set arrow 1 from graph 0, first 3 to graph 1, first 3 nohead lc rgb "#ff0000" lt 2 lw 2 set arrow 2 from graph 0, first 6 to graph 1, first 6 nohead lc rgb "#0000ff" lt 1 lw 2 # This functions gives the name of the snapshot file snapshot(i) = sprintf("snapshot_%04d.dat", i) plot for [i=1:n] './snapshots/'. snapshot(n+1-i) using 1:2:3 with boxes linecolor palette
注意事项
- 如果需要添加更多水平线,只需要增加
set arrow的编号(3、4...)即可,不要重复使用同一编号 - 可以根据你的可视化需求调整线的样式,比如用
lc palette绑定你加载的color.pal颜色板,让水平线和图中颜色风格统一 - 如果你设置了
yrange,确保水平线的y值在你的y轴范围内,否则不会显示
内容的提问来源于stack exchange,提问作者Many
相关产品推荐
相关产品推荐

