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

Gnuplot:如何为多条参数曲线设置不同的参数范围?

问题:绘制多条不同参数范围的参数曲线失败

我想要绘制三条参数曲线,每条曲线使用不同的参数范围。我查阅了gnuplot的演示脚本页面,其中第9个绘图示例实现了我想要的效果,但我的代码却无法正常运行:

set parametric
#set urange [0:2*pi]
#set vrange[0.3*pi:pi]
# Parametric functions for the sphere
set samples 1000
wplus = 20
wminus = 1
wz = 10
# 0 = one large circle
rhoplus0 = 0
rhominus0 = 10
rhoz0 = 0
fx0(u) = rhoplus0*cos(wplus*u) + rhominus0*cos(wminus*u)
fy0(u) = -rhoplus0*sin(wplus*u) - rhominus0*sin(wminus*u)
fz0(u)   = rhoz0*cos(wz*u)
# 1 = axial oscillation
rhoplus1 = 0
rhominus1 = 10
rhoz1 = 5
fx1(u) = rhoplus1*cos(wplus*u) + rhominus1*cos(wminus*u)
fy1(u) = -rhoplus1*sin(wplus*u) - rhominus1*sin(wminus*u)
fz1(u)   = rhoz1*cos(wz*u)
# 2 = many small circles
rhoplus2 = 2
rhominus2 = 10
rhoz2 = 0
fx2(u) = rhoplus2*cos(wplus*u) + rhominus2*cos(wminus*u)
fy2(u) = -rhoplus2*sin(wplus*u) - rhominus2*sin(wminus*u)
fz2(u)   = rhoz2*cos(wz*u)
splot [u=0:2*pi] fx0(u),fy0(u),fz0(u),\
      [u=pi:2*pi] fx1(u),fy1(u),fz1(u), \
      [u=0:pi] fx2(u),fy2(u),fz2(u)

绘图结果仅采用了最后一个u范围,即[u=0:pi]。我也查阅了相关问题,但并未解决我的问题。请问我哪里操作出错了?


解决方案

问题出在gnuplot的参数范围解析逻辑上:在splot命令中,单个参数范围声明会全局覆盖之前的设置,而非仅作用于紧跟的那条曲线。gnuplot会用最后一次定义的参数范围来绘制所有曲线,这就是你只看到最后一个范围生效的原因。

你可以用两种方式修复:

方法一:使用++强制局部范围生效

在每条曲线的参数范围前加上++,让gnuplot为每条曲线单独创建绘图上下文,局部范围就会生效:

splot ++[u=0:2*pi] fx0(u),fy0(u),fz0(u),\
      ++[u=pi:2*pi] fx1(u),fy1(u),fz1(u), \
      ++[u=0:pi] fx2(u),fy2(u),fz2(u)

方法二:用set urange结合replot叠加曲线

先设置第一个范围绘制第一条曲线,再修改范围用replot叠加后续曲线:

set urange [0:2*pi]
splot fx0(u),fy0(u),fz0(u)
set urange [pi:2*pi]
replot fx1(u),fy1(u),fz1(u)
set urange [0:pi]
replot fx2(u),fy2(u),fz2(u)

这两种方法都能让每条曲线使用独立的参数范围,达到你想要的效果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:54:36