2012-10-05 10 views
9

私は、スクリーンの中心(または中心付近であるが、必ずしも中央ではない)を原点とする座標系上に関数をプロットする必要があり、原点を横切るように軸を描く必要があります。軸にはラベルやチック、矢印も付いているはずです。グラフの中心に軸を移動する方法は?

これを効率的に行う方法はわかりません。私のコードでは、手動でチックのオフセットを設定し、オフセットを使って手動で矢印を描きます。軸ラベルのオフセットも設定しました。これはすべて非常に壊れやすく、オフセットは端末の設定によって変わります。

サンプルコードまたは説明を参考にしてくれたら助かりますか?

答えて

10

まあ、_zeroaxisを使用すると、ティックとラベルを取得する「正しい」方法です。_rangeを設定すると、0,0を中心とする対称性が得られます。_rangeが分かれば、手動で矢印をクリックします。ジムの答えに加えて

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) 

enter image description here

+2

+1。 'set zeroaxis'は1つのコマンドで両方の軸が原点を通るように見えます。軸に必要な太さと線種を指定することもできます: 'set zeroaxis linewidth 2 linetype 1'など – Umang

+0

まず、x2ticsを解除し、y2ticsを解除することができます。それ以外の場合は、2回表示されたすべての目盛りを取得します。 – d3dave

3

ハック攻撃!

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 

私はこの出力を得る: enter image description here

あなたはzeroaxisオプションに見えるかもしれません、と述べました。デモはhereです。悲しいことに、このオプションは軸をゼロに描画するのではなく、その位置に線を置くだけです。

私の方法は「効率的です」とは言いませんが、ほとんどの作業はreplotコマンドによって行われるので、プロットされている関数/データを変更することとは別に、これを目的に合わせて変更することはあまりありません。 gnuplotに軸の終わりに矢印を付けるか、軸がネイティブに描かれる場所を変更するオプションはわかりません。

+0

1にすることができるならば、「ハックアタック!」 (と見栄えの良いプロット) – mgilson

1

、必要チックおよび軸がためにフロント

# bring the grid over the plot 
set grid front 

# remove grid if not required 
unset grid 
関連する問題