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
相关产品推荐
相关产品推荐

