Gnuplot粗曲线超出绘图边界

Gnuplot粗曲线超出绘图边界,gnuplot,Gnuplot,我在Gnuplot中绘制了以下内容。我的问题是曲线超出了边界(因此我们可以看到紫色和蓝色曲线超出了y轴)。有办法解决这个问题吗?我希望在绘图区域内有一些限制绘图的东西。当然,我可以画更少的曲线,但那看起来很奇怪。理想情况下,我希望Gnuplot绕过曲线的帧,并删除其中的任何曲线位 为了说明这个问题,我把紫色曲线画得异常胖。但蓝色曲线也存在问题 生成上述绘图的代码为: #!/usr/bin/env gnuplot ### n: change this parameter to equal th

我在Gnuplot中绘制了以下内容。我的问题是曲线超出了边界(因此我们可以看到紫色和蓝色曲线超出了y轴)。有办法解决这个问题吗?我希望在绘图区域内有一些限制绘图的东西。当然,我可以画更少的曲线,但那看起来很奇怪。理想情况下,我希望Gnuplot绕过曲线的帧,并删除其中的任何曲线位

为了说明这个问题,我把紫色曲线画得异常胖。但蓝色曲线也存在问题

生成上述绘图的代码为:

#!/usr/bin/env gnuplot

### n: change this parameter to equal the number of data sets to be plotted
n = 2
# t: top margin in pixels
t = 25.0
# b: key height in pixels (bottom margin)
b = 25.0
# h: height of output in pixels
h = 150.0*n + t + b

### define functions to help set top/bottom margins
top(i,n,h,t,b) = 1.0 - (t+(h-t-b)*(i-1)/n)/h
bot(i,n,h,t,b) = 1.0 - (t+(h-t-b)*i/n)/h

### first set up some basic plot parameters
#set term cairolatex size 15cm,15cm
#set output 'DifferentialAmplifierPlot.tex'

set term pdfcairo size 15cm,15cm
set output 'DifferentialAmplifierPlot.pdf'

set border lw 4

set grid mxtics mytics xtics ytics ls '-1' ls '-1' lc rgb 'gray70', lc rgb 'gray90'

set mxtics
set mytics

# Make yrange > ytics > function to get padding.
set yrange [-1.5:1.5]
set ytics ("" -1.5, -1.25 1, -1.0, -0.75 1, -0.5, -0.25 1, 0.0, 0.25 1, 0.5, 0.75 1, 1.0, 1.25 1, "" -1.5)

set xtics 0,1,5
set xrange [0:5]

set xtics
set mxtics
set mytics

set format x ""
set grid xtics ytics mxtics mytics ls -1 ls -1 lc rgb 'gray60', lc rgb '#C0E5E5E5''

set multiplot layout (n+1),1 #font ",14" title 'Input And Output Voltages Of Differential Amplifier'

### First plot
# change only plot command here
currentplot = 1
set tmargin at screen top(currentplot,n,h,t,b)
set bmargin at screen bot(currentplot,n,h,t,b)
unset key
unset xlabel
set title 'Input (Bottom) And Output (Top) Voltages Of The Differential Amplifier'
set ylabel 'Voltage [V]'
plot 'DifferentialAmplfier.dat' using (1000*$1):2 with lines lw 20 lc rgb 'dark-magenta'

### Last plot
# change only plot command here
currentplot = currentplot + 1
set tmargin at screen top(currentplot,n,h,t,b)
set bmargin at screen bot(currentplot,n,h,t,b)
set format x
unset title
set xlabel 'Time [ms]'
set ylabel 'Voltage [mV]'
plot 'DifferentialAmplfier.dat' using (1000*$1):(1000*$3) with lines lw 10 lc rgb 'navy'

unset multiplot

set term x11
可疑/不可靠的修复


有一种方法可以做到这一点,但很麻烦。您可以使用多点打印,绘制数据,然后通过明智地使用
图形
屏幕
坐标系在绘图周围绘制白色矩形,然后重新绘制空白绘图以重新绘制边界(因为矩形将覆盖标签和边界线厚度的一半)。这里是一个MWE:

#!/usr/bin/gnuplot -persist

reset
f(x) = sin(x)

xl=0; xh=20; yl=-1; yh=1;
set xrange [xl:xh]
set yrange [yl:yh]

set multiplot

plot f(x) not w l lt 3 lw 12

## overdraw borders on left, right, top, bottom
set object 1 rectangle from screen 0, screen 0 to graph 0, screen 1 behind \
  fillstyle solid noborder
set object 2 rectangle from graph 1, screen 0 to screen 1, screen 1 behind \
  fillstyle solid noborder
set object 3 rectangle from screen 0, graph 1 to screen 1, screen 1 behind \
  fillstyle solid noborder
set object 4 rectangle from screen 0, screen 0 to screen 1, graph 0 behind \
  fillstyle solid noborder

plot NaN not

unset multiplot

你可以通过增加边界来作弊,但我想你不会想要的……是的,我也想到了,但那确实有点糟糕,我最终得到了巨大的边界。我也想过在上面画一个白色的长方形,但这看起来很可笑。你知道是否至少有一种方法可以将曲线带到前一层,使其越过边界吗?实际上已经找到了如何做到这一点
set border back
问题是,gnuplot在核心代码中进行剪裁,这只能考虑坐标,而不能考虑线条的形状。这需要对代码进行大量修改。我仍然对反馈给您的功能请求感到好奇。用户有时也会做出奇怪的事情
;)。事实上,逗号是必需的:逗号前面的都是长轴,后面的都是短轴。而
ls-1
没有意义,因为
linestyle
是用户定义的样式,必须有一个数字
>0
。您的意思是
lt-1
,在您的案例中,gnuplot会返回到它。因此,您的网格选项是
设置网格mxtics mytics xtics ytics lt-1 lc rgb'gray70',lt-1 lc rgb'gray90'
。捕捉得好。这不适用于所有终端,
postscript
终端不允许
lw 0
,因此您必须使用
fillstyle-solid-noborder
。谢谢@Christoph,我将相应地更改脚本。上述代码不适用于
cairolatex
。知道为什么吗?谢谢。有关
cairolatex
(和
epslatex
)与其他终端相比的不同行为的解释,请参见我的答案中的编辑。@Andreas我在Debian上用4.6.0、4.6.3、4.6.4和4.7(2013-08-01和2013-09-23)再次测试了它,并且它可以与所有这些终端一起工作,我运行
gnuplot mosfet.gp和&pdflatex MosfetClassAbPowerFixed.tex和&xpdf MosfetClassAbPowerFixed.pdf