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

如何在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 C
  • file_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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:04:10