【问题标题】:Plotting two parametric functions in Gnuplot with two command lines separated by a ',\'?在 Gnuplot 中使用由“,\”分隔的两个命令行绘制两个参数函数?
【发布时间】:2021-12-08 23:36:40
【问题描述】:

在绘制单个变量的函数时,我可以使用以下形式的命令绘制多个函数

plot  x ti "first function",\
      x**2.0 ti "second function"

我想对参数图做同样的事情,但这在我感兴趣的示例中不起作用。我为您制作了一个最小的工作示例:

K = 360.0/(2.0*pi);
k = 1.0/K;

xe(lambda) =  (-1.0) * ( ((0.0 <= lambda) & (lambda < 180.0)) ? lambda: lambda - 360.0 )*k
ye(phi) = (log(1./cos(phi*k) + tan(phi*k)))

set parametric
set multiplot

PHI(t, d, GHA, omega) =pi/2.-acos(cos(omega) * sin(d)-cos(d) * cos(t) * sin(omega))
LAMBDA(t, d, GHA, omega) = ( lambda = -(atan((-sin(GHA) * (cos(d)* cos(omega)+cos(t) * sin(d) * sin(omega))+cos(GHA) * sin(omega) * sin(t))/(cos(d) * cos(GHA) * cos(omega)+sin(omega)*  (cos(GHA) * cos(t) * sin(d)+sin(GHA)* sin(t)))) + (cos(d)* cos(GHA)* cos(omega) +  sin(omega) * (cos(GHA)* cos(t) * sin(d) + sin(GHA)  *sin(t)) >0.0 ? 0.0 : pi)) , lambda - 2.0*pi*floor(lambda/(2.0*pi)))

lambda_min = 170;
lambda_max = 190;
phi_min = 310;
phi_max = 80;

set xrange [xe(lambda_min):xe(lambda_max)]
set yrange [ye(phi_min):ye(phi_max)]

plot [0.:2.09 ] xe(K*LAMBDA(t, 0.46, 4.63, 1.25)), ye(K*PHI(t, 0.46, 4.63, 1.25)) lt 1 linecolor rgb "red" ti "A" ,\
[2.09:2.*pi] xe(K*LAMBDA(t, 0.46, 4.63, 1.25)), ye(K*PHI(t, 0.46, 4.63, 1.25))  lt 1 linecolor rgb "blue" ti "B"

开启

Gnuplot 版本 5.4 补丁级别 2 最后修改时间为 2021-06-01

这会产生以下图:,其中曲线“A”和“B”重叠。

但是,如果我将最后两行替换为

,将绘图命令拆分为单独的行
plot [0.:2.09 ] xe(K*LAMBDA(t, 0.46, 4.63, 1.25)), ye(K*PHI(t, 0.46, 4.63, 1.25)) lt 1 linecolor rgb "red" ti "A"
plot [2.09:2.*pi] xe(K*LAMBDA(t, 0.46, 4.63, 1.25)), ye(K*PHI(t, 0.46, 4.63, 1.25))  lt 1 linecolor rgb "blue" ti "B"

然后我得到这个情节

我想通过保留第一个绘图命令来获得第二个图形结果

plot [0.:2.09 ] xe(K*LAMBDA(t, 0.46, 4.63, 1.25)), ye(K*PHI(t, 0.46, 4.63, 1.25)) lt 1 linecolor rgb "red" ti "A" ,\
[2.09:2.*pi] xe(K*LAMBDA(t, 0.46, 4.63, 1.25)), ye(K*PHI(t, 0.46, 4.63, 1.25))  lt 1 linecolor rgb "blue" ti "B"

并且不改变脚本中的其他元素(即使它们在最小的工作示例中看起来毫无用处,但它们对于我想要做的实际的、非最小的情节是必需的)。

我该怎么做? 谢谢!

【问题讨论】:

    标签: plot graph gnuplot


    【解决方案1】:

    以下似乎对我有用。它在所需的参数范围内使用特殊文件名'+',检查help special-filenameshelp sampling 1D

    代码:

    ### parametric curve
    reset session
    
    K = 360.0/(2.0*pi);
    k = 1.0/K;
    
    xe(lambda) =  (-1.0) * ( ((0.0 <= lambda) & (lambda < 180.0)) ? lambda: lambda - 360.0 )*k
    ye(phi)    = (log(1./cos(phi*k) + tan(phi*k)))
    
    PHI(t, d, GHA, omega)    =  pi/2.-acos(cos(omega) * sin(d)-cos(d) * cos(t) * sin(omega))
    LAMBDA(t, d, GHA, omega) = ( lambda = -(atan((-sin(GHA) * (cos(d)* cos(omega)+cos(t) * sin(d) * sin(omega))+cos(GHA) * sin(omega) * sin(t))/(cos(d) * cos(GHA) * cos(omega)+sin(omega)*  (cos(GHA) * cos(t) * sin(d)+sin(GHA)* sin(t)))) + (cos(d)* cos(GHA)* cos(omega) +  sin(omega) * (cos(GHA)* cos(t) * sin(d) + sin(GHA)  *sin(t)) >0.0 ? 0.0 : pi)) , lambda - 2.0*pi*floor(lambda/(2.0*pi)))
    
    lambda_min = 170
    lambda_max = 190
    phi_min    = 310
    phi_max    = 80
    
    set xrange [xe(lambda_min):xe(lambda_max)]
    set yrange [ye(phi_min)   :ye(phi_max)]
    set parametric
    
    plot [t=0   :2.09] '+' u (xe(K*LAMBDA(t, 0.46, 4.63, 1.25))):(ye(K*PHI(t, 0.46, 4.63, 1.25))) w l lc rgb "red"  ti "A" ,\
         [t=2.09:2*pi] '+' u (xe(K*LAMBDA(t, 0.46, 4.63, 1.25))):(ye(K*PHI(t, 0.46, 4.63, 1.25))) w l lc rgb "blue" ti "B"
    ### end of code
    

    结果:

    【讨论】:

      猜你喜欢
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 2012-01-28
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 2013-05-11
      相关资源
      最近更新 更多