我需要在一个坐标系上绘制一个函数,该坐标系的原点位于屏幕的中心(或者靠近中心的位置,但不一定在中心),我需要绘制轴,使它们在原点交叉.轴也应该有标签和抽搐,以及箭头.
我不知道如何有效地做到这一点,到目前为止在我的代码中我手动设置我的抽搐的偏移量,并使用偏移量手动绘制箭头.我还在轴标签上设置了偏移量.所有这些都非常脆弱,并且偏移会根据终端设置而改变.
有人请帮我提供示例代码或解释如何以正确的方式执行此操作?
Jim*_*ham 13
好吧,使用_zeroaxis是获得抽动和标签的"正确"方法:设置_范围为您提供对称以使0,0居中......一旦您知道_范围,您就可以手动绘制箭头.
set xzeroaxis
set xtics axis
set xrange [-10:10]
set arrow 1 from -9,0 to -10,0
set arrow 2 from 9,0 to 10,0
set yzeroaxis
set ytics axis
set yrange [-1:1]
set arrow 3 from 0,-.9 to 0,-1
set arrow 4 from 0,.9 to 0,1
set border 0
plot sin(x)
Run Code Online (Sandbox Code Playgroud)

黑客攻击!
set term pngcairo truecolor size 300,300 font "Arial,12"
set out 'plot.png'
# x,y min/max and center
xmin = -10
xc = 0
xmax = 10
ymin = -2
yc = 0
ymax = 2
# default borders
tm = 1
bm = 1
rm = 4
lm = 4
# arrow scale factor to cover last tic
af = 1.05
set arrow from xc,yc to xmin*af,yc filled size 0.6,30
set arrow from xc,yc to xmax*af,yc filled size 0.6,30
set arrow from xc,yc to xc,ymax*af filled size 0.6,30
set arrow from xc,yc to xc,ymin*af filled size 0.6,30
set multiplot layout 2,2
## Plot 1, top left
set key top left
set xr [xmin:xc]
set yr [yc:ymax]
set tmargin tm
set bmargin 0
set rmargin 0
set lmargin lm
set border 9
unset ytics
set xtics nomirror
plot sin(x)
## Plot 2, top right
unset key
set xr [xc:xmax]
set lmargin 0
set rmargin rm
set border 3
set ytics nomirror
replot
## Plot 3, bottom left
set xr [xmin:xc]
set yr [ymin:yc]
set bmargin bm
set tmargin 0
set lmargin lm
set rmargin 0
set border 12
unset tics
replot
## Plot 4, bottom right
set xr [xc:xmax]
set lmargin 0
set rmargin rm
set border 6
set ytics nomirror
replot
unset multiplot
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:

也就是说,您可能会研究该zeroaxis选项。有一个示范这里。遗憾的是,此选项不会在零处绘制轴,而只是在该位置放置一条线。
我不会说我的方法是“有效的”,但是除了更改正在绘制的函数/数据之外,可能没有太多的努力来为您的目的修改它,因为大部分工作是由replot命令完成的。我不知道有什么选项可以让 gnuplot 在轴的末端放置箭头或更改轴的本地绘制位置。