如何在gnuplot中绘制基于x区间(x1:x2:y)的填充区域?
在Gnuplot中绘制固定y值下的x方向填充区域
没问题,我来帮你搞定这个需求!你需要的是针对每个固定的y值(也就是你数据里的第三列C),填充x从rho1(第一列)到rho2(第二列)的水平区间,这其实可以通过Gnuplot的filledcurve绘图类型轻松实现,不需要拆分数据文件(当然拆分也支持,后面会提到)。
核心实现思路
Gnuplot的filledcurve默认处理垂直方向的填充(同一x值下y的范围),但只要指定x1模式,就能切换为水平方向填充——也就是针对同一y值,填充两个x边界之间的区域。
直接使用原始三列数据的脚本示例
假设你的数据保存在data.txt文件中,每行格式为rho1 rho2 C,可以用下面的脚本:
# 设置输出终端(这里用png,你可以换成pdf、svg等) set terminal pngcairo enhanced font 'Arial,12' set output 'horizontal_fill_plot.png' # 配置坐标轴和标题 set xlabel 'rho' font 'Arial,10' set ylabel 'C' font 'Arial,10' set title 'Range of rho for each C value' font 'Arial,14' # 绘制水平填充区域 plot 'data.txt' using 1:3:2 with filledcurve x1 \ lc rgb '#8dd3c7' fillstyle solid 0.6 \ title 'rho1 to rho2'
代码解释:
using 1:3:2:指定用第一列(rho1)作为左x边界,第三列(C)作为y值,第二列(rho2)作为右x边界filledcurve x1:告诉Gnuplot填充同一y值下两个x点之间的水平区域lc rgb '#8dd3c7':设置填充颜色(你可以换成任意RGB值或颜色名称)fillstyle solid 0.6:设置填充透明度(0为完全透明,1为完全不透明)
拆分数据文件的情况(可选)
如果你确实需要把数据拆成两个文件:
file_left.txt:每行是rho1 Cfile_right.txt:每行是rho2 C
可以用下面的脚本实现同样的效果:
plot 'file_left.txt' using 1:2 with filledcurve x1 'file_right.txt' using 1:2 \ lc rgb '#fb8072' fillstyle solid 0.5 \ title 'rho range'
额外技巧
- 如果需要在填充区域上叠加曲线(比如rho1和rho2的折线),可以在
plot命令后追加对应的绘图项:plot 'data.txt' using 1:3:2 with filledcurve x1 lc rgb '#8dd3c7' fillstyle solid 0.6 title 'Fill', \ '' using 1:3 with lines lc rgb '#000000' title 'rho1', \ '' using 2:3 with lines lc rgb '#333333' title 'rho2' - 调整坐标轴范围可以用
set xrange [min:max]和set yrange [min:max]来精确控制。
内容的提问来源于stack exchange,提问作者Romulo Cenci
相关产品推荐
相关产品推荐

