我基本上希望使用gnuplot完成this(第一个图表)。我搜索过,发现没有这样的东西。我可以做一个很好的重量级,没有最后的小圆圈和两条线的开始,但我似乎无法用小圆圈得到它。实际上,第二张图也很好。第三,但我并不贪心。
答案 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
结果:
添加:
使用更短和更少混乱的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
结果:
答案 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
根据自己的喜好修复颜色。