Gnuplot双X轴(日期/周数)boxxy误差棒偏移问题咨询
问题原因与解决方案
你的gnuplot脚本中x2轴的boxxy图形出现偏移,核心原因有两个:
- 重复绘制同一组数据(分别绑定x1y1和x2y1轴),gnuplot处理双时间轴时,自动刻度计算的细微差异会导致坐标错位;
- 未显式同步x1与x2轴的数值范围,导致x2轴的坐标映射和x1轴不完全对齐。
实际上双时间轴的作用是用不同格式展示同一x轴的刻度,完全不需要重复绘图。调整后的脚本如下:
$test0<<EOD m1 01.06.2025 30.06.2025 m2 10.06.2025 17.07.2025 m3 20.06.2025 08.08.2025 EOD set term qt font "Carlito,12" butt antialias size 1440,360 set timefmt "%d.%m.%Y" # 计算一个月的秒数作为xtics间隔 OneMonth = strptime("%m","2") - strptime("%m","1") set xdata time set format x "%b %y" set x2data time set format x2 "%Ww" # 显式同步x1和x2轴的范围,并强制数值映射完全一致 set xrange ["20.05.2025":"20.08.2025"] set x2range ["20.05.2025":"20.08.2025"] set link x2 via x inverse x unset border set yrange [-1:3] set xtics OneMonth nomirror set xtics offset 0,0.5 set x2tics nomirror scale 0.8,0.5 font ",10" offset 0,-0.5 set mxtics 4 set mx2tics 2 set ytics nomirror offset 1.5,0 set style fill transparent solid 0.3 unset key set grid y # 只需要绘制一次,x2轴会自动同步x1的坐标 plot $test0 using 2:($0):2:3:($0)-0.2:($0)+0.2:yticlabel(1) with boxxy lc "blue" axes x1y1
关键调整说明:
- 用
set link x2 via x inverse x强制x2轴与x1轴的数值完全一一映射,彻底避免坐标偏移; - 显式设置
x2range与xrange一致,确保双轴的数值范围完全对齐; - 删除重复的plot命令,只绘制一次数据,双轴会各自显示对应的刻度格式;
- 修正了
OneMonth的计算方式,用两个月份的时间差计算一个月的秒数,比原代码更准确。
内容的提问来源于stack exchange,提问作者Sergei
相关产品推荐
相关产品推荐

