You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gnuplot中为30个bin的y轴数据添加[-5,2]范围公式化x轴数值的方法

解决方案

你可以选择两种方式实现需求,第一种无需修改原始数据文件,直接在Gnuplot脚本内通过公式生成x轴数值,第二种可以预处理数据文件补充x列。

方案1:直接在Gnuplot脚本内配置(推荐)

30个bin对应x轴区间[-5,2],总跨度为7,行号$0(Gnuplot内置变量,从0开始计数,对应30个bin的0~29序号)对应的x值计算公式为:-5 + 7 * $0 / 29,计算后第0行x为-5,第29行x为2,刚好覆盖你要的区间。

修改后的脚本示例如下:

set style line 1 dt 1 lc rgb "black" lw 2 pt 1 ps default
set style line 2 dt 2 lc rgb "black" lw 5 pt 1 ps default
# 显式固定x轴范围
set xrange [-5:2]

# 仅需将原plot语句中的$0替换为上述公式即可
plot 'file1.txt' u (-5 + 7 * $0 / 29):($1) w l smooth bezier ls 1 title "title1",\
     'file2.txt' u (-5 + 7 * $0 / 29):($1) w l smooth bezier ls 2 title "title2"

补充说明:如果你需要取每个bin的中心点作为x坐标,可将公式替换为 -5 + 7 * ($0 + 0.5) / 30。

方案2:预处理数据文件补充x列

如果你需要留存带x轴数值的数据文件,可以用awk命令直接处理原始数据,无需使用grep:

# 处理file1.txt,生成第一列为x、第二列为原y值的新文件
awk 'BEGIN{step = (2 - (-5))/29} {x = -5 + step*(NR-1); printf "%.6f %s\n", x, $0}' file1.txt > file1_with_x.txt
# 同理处理file2.txt
awk 'BEGIN{step = (2 - (-5))/29} {x = -5 + step*(NR-1); printf "%.6f %s\n", x, $0}' file2.txt > file2_with_x.txt

处理完成后,绘图脚本可以直接读取两列数据绘图:

set style line 1 dt 1 lc rgb "black" lw 2 pt 1 ps default
set style line 2 dt 2 lc rgb "black" lw 5 pt 1 ps default
set xrange [-5:2]

plot 'file1_with_x.txt' u 1:2 w l smooth bezier ls 1 title "title1",\
     'file2_with_x.txt' u 1:2 w l smooth bezier ls 2 title "title2"

内容的提问来源于stack exchange,提问作者Pramod Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:06:03