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

如何绘制带阴影区域的二元函数sublevel set及单变量函数曲线?

在Gnuplot中绘制二元函数子水平集(阴影区域)+单变量曲线

以下是两种可靠的解决方案,针对你遇到的子水平集无法正确填充阴影的问题:

方法一:直接用pm3d绘制填充区域(推荐)

无需额外保存数据文件,直接通过条件过滤绘制子水平集,同时叠加单变量曲线:

# 定义子水平集阈值
value = 0.5  

# 设置x、y轴范围(根据你的函数调整)
set xrange [-3:3]
set yrange [-3:3]

# 配置2D视图和填充样式
set view map
set pm3d map depthorder
set palette model RGB defined (0 "lightgray")  # 自定义子水平集填充颜色
unset colorbox  # 隐藏颜色条(可选)

# 绘制子水平集(f(x,y) ≤ value的区域)+单变量曲线
splot (f(x,y) <= value ? f(x,y) : 1/0) with pm3d, \
      g(x) with lines lw 2 lc "darkblue"

关键要点:

  • set view map 将3D绘图转为2D平面视图
  • 用(f(x,y) <= value ? f(x,y) : 1/0)过滤出子水平集区域,不满足条件的点被忽略
  • pm3d 会自动填充满足条件的连续区域,无需处理散点数据

方法二:提取等值线后填充内部

如果需要基于等值线数据绘制,确保提取闭合的等值线再填充:

value = 0.5
set xrange [-3:3]
set yrange [-3:3]

# 提取子水平集的等值线数据到文件
set table 'sublevel_contour.dat'
set contour base  # 仅绘制基础等值线(无表面)
set cntrparam levels discrete value  # 指定阈值
unset surface
set view map
splot f(x,y)
unset table

# 绘制填充区域+单变量曲线
plot 'sublevel_contour.dat' with filledcurves closed fc "lightgray", \
     g(x) with lines lw 2 lc "darkblue"

关键要点:

  • set contour base 确保只生成等值线数据,避免干扰
  • filledcurves closed 强制将等值线视为闭合区域,正确填充内部
  • 若等值线不闭合(比如函数在边界截断),可手动补充边界点或调整x/yrange

之前方法的问题分析

  • 方法一用散点数据尝试filledcurves:filledcurves需要连续的闭合曲线数据,散点无法被正确识别为填充区域,因此只能用points显示
  • 方法三未指定filledcurves closed:若等值线数据不闭合或格式不对,filledcurves无法自动填充内部,加上closed参数可解决大部分情况

内容的提问来源于stack exchange,提问作者Edwin Franks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:34:51