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

