简单的重型功能图形与gnuplot?

时间:2018-04-15 22:50:33

标签: gnuplot

我基本上希望使用gnuplot完成this(第一个图表)。我搜索过,发现没有这样的东西。我可以做一个很好的重量级,没有最后的小圆圈和两条线的开始,但我似乎无法用小圆圈得到它。实际上,第二张图也很好。第三,但我并不贪心。

2 个答案:

答案 0 :(得分:2)

只是为了记录和完整性...尽管您可以定义一个函数

H(x) = x<0 ? 0 : 1

如果你密谋

plot H(x) w l

该线将在零处连续,并且当然没有点。 因此,下面的建议仅包含两列x,y和可变点类型。

代码:

### Heaviside function
reset session

$Heaviside <<EOD
-2 0
 0 0
 
 0 0.5
 
 0 1
 2 1
EOD

set yrange [-1:2]
set ytics 1
unset key
set multiplot layout 3,1
    plot $Heaviside u 1:2 w l lc 0, \
         '' u 1:($0==1||$0==3?$2:NaN):($0==3?7:6) w p pt var lc 0

    plot $Heaviside u 1:2 w l lc 0, \
        '' u 1:($0==1||$0==2||$0==3?$2:NaN):($0==2?7:6) w p pt var lc 0

    set xrange [0:4]
    a = 3
    plot $Heaviside u ($1+a):2 w l lc 0, \
        '' u ($1+a):($0==1||$0==3?$2:NaN):($0==3?7:6) w p pt var lc 0
unset multiplot
### end of code

结果:

enter image description here

添加:

使用更短和更少混乱的plot命令的变体,但是使用4列和可变点类型。这样会得到与上面相同的结果。

代码:

### Heaviside function
reset session

$Heaviside <<EOD
-2 0    NaN  NaN
 0 0    6    6
 
 0 0.5  NaN  7
 
 0 1    7    6
 2 1    NaN  NaN
EOD

set yrange [-1:2]
set ytics 1
unset key
set multiplot layout 3,1
    plot $Heaviside u 1:2 w l lc 0, \
         '' u 1:2:3 w p pt var lc 0

    plot $Heaviside u 1:2 w l lc 0, \
         '' u 1:2:4 w p pt var lc 0

    set xrange [0:4]
    a = 3
    plot $Heaviside u ($1+a):2 w l lc 0, \
         '' u ($1+a):2:3 w p pt var lc 0
unset multiplot
### end of code 

添加2:

为了最终确定答案,这是一种绘制包含Heaviside函数的 functions 函数的方法。 而不是从具有固定x值的数据块中进行绘制(如上述两个示例),它使用当前的x范围。请注意,例如语法plot '+' u 1:(sin($1))plot sin(x)基本相同。

显然,通过lc rgb -1设置线条颜色不会绘制线条,可以在此处用于中断线条。您可能需要增加样本,例如set samples 300以避免点和函数之间出现间隙。

代码:

### plotting Heaviside function and functions containing Heaviside function 
#   including line interruption and inclusion/exclusion points
reset session

Heaviside(x,a) = x<a ? 0 : 1                              # definition of Heaviside function
array Hpoints[2] = [6,7]                                  # array for plotting "Heaviside points"
Hcolor(x) = (x0=x1, x1=x, x0<a && x1>=a ? -1 : 0xff0000)  # set color -1 for line interruption
dx(n) = 1e-3*(2*n-1)                                      # small dx to get y-value of points close to break

f(x,a) = 50/(x**2+2)*cos(4*x) * Heaviside(x,a)

unset key
set multiplot layout 2,1
    a = 2.0
    set yrange[-1:2]
    plot x1=NaN '+' u 1:(Heaviside(x,a)):(Hcolor(x)) w l lc rgb var, \
         Hpoints u (a):(Heaviside($1,a)):(Hpoints[$0+1]) w p pt var lc rgb Hcolor(NaN)
    
    a= 0
    set samples 300
    set yrange[-25:35]
    plot x1=NaN '+' u 1:(f(x,a)):(Hcolor(x)) w l lc rgb var, \
         Hpoints u (a):(f(a+dx($0),a)):(Hpoints[$0+1]) w p pt var lc rgb Hcolor(NaN)
unset multiplot
### end of code

结果:

enter image description here

答案 1 :(得分:1)

我创建了以下数据文件(请注意两个空行):

-2 0 0 1
0 0 2 1


0 0 0 1

并运行以下gnuplot命令:

set yrange [-2:2]
plot "file"     using 1:2 with lines,\
     ""         using 3:4 with lines, \
     "" index 1 using 1:2 with points pointtype 6, \
     "" index 1 using 3:4 with points pointtype 7

根据自己的喜好修复颜色。