Gnuplot如何通过数据集关联x1与x2轴而非函数?
Gnuplot实现双X轴(温度+时间)及规整温度刻度
核心思路
利用温度与时间的单调对应关系,通过插值将规整温度刻度映射到对应的时间值,分别作为x1(温度)和x2(时间)轴的刻度,同时绘制物理量C随温度(本质随时间)的变化曲线,完全支持刻度样式自定义。
具体实现代码
# 1. 配置文件与插值函数 datafile = 'test_data.txt' # 替换为你的测试数据文件名 # 定义温度转时间的插值函数(温度列是第2列,时间列是第1列) stats datafile using 2:1 nooutput T_min = STATS_min_x T_max = STATS_max_x time(T) = interpolate(T, datafile, 2, 1) # 2. 设置x1轴(温度):规整刻度 set xtics 300, 50, 600 # 起始300,步长50,终止600,可按需调整 set xlabel '温度' font "Arial,12" set xrange [T_min:T_max] set xtics format "%.0f" # 整数刻度显示,匹配示例样式 # 3. 设置x2轴(时间):映射温度对应的时间刻度 set x2tics () # 清空默认刻度 # 循环生成x2轴刻度,与x1的规整温度一一对应 do for [T=300:600:50] { t_val = time(T) set x2tics add (sprintf("%.1f", t_val) T) # 时间保留1位小数,可调整格式 } set x2label '时间' font "Arial,12" set x2tics font "Arial,10" rotate 45 # 自定义标签字体、旋转角度 # 4. 设置y轴与图表样式 set ylabel '物理量C' font "Arial,12" set yrange [*:*] set style line 1 lw 2 lc rgb '#0066cc' # 曲线粗细、颜色 set grid xtics ytics # 显示网格线 set key off # 5. 绘图 plot datafile using 2:3 with lines ls 1
关键说明
- 插值函数
interpolate:gnuplot 5.0+版本内置,可根据温度值自动查找对应时间,确保x2轴刻度与x1轴温度严格对应;旧版本可手动实现线性插值逻辑。 - 刻度样式控制:通过
set xtics/x2tics font、rotate、format等参数,完全自定义刻度的字体、角度、显示格式,解决原方案无法控制样式的问题。 - 数据兼容性:适用于大量数据点,无需手动标注每个点的标签,自动完成温度-时间的映射。
内容的提问来源于stack exchange,提问作者atapaka
相关产品推荐
相关产品推荐

