1

次のスクリプトを使用してプロットを生成しました。結果を下の図に示します。見にくいですが、xlabel、ylabel、title、tic の数字は、plot関数が呼び出されるたびに実際に何度も描画されていmultiplotます。どうすればこれを回避でき、他に何もせずにグラフをプロットできますか? タイトル、目盛りなどを設定解除してからプロットすると、グラフはフレームと同じ領域にプロットされず、左の y 軸がある場所にペトルードします。

#set datafile separator ' '
set samples 1000

set term tikz size 17cm,10cm dashed
set out 'MosfetClassAbPower.tex'

unset key

set border lw 2

set style fill transparent solid 0.5 noborder

set title 'MOSFET $\mathrm{I_D}$ Vs Time'
set ylabel 'Drain Current [$\mu$A]'
set xlabel 'Time [ms]'

set xrange [0:4]
set xtics 0,0.5,4
set mxtics 4

set yrange [-50:450]
set mytics 4

set rmargin 5
set label 1 '\SI{60}{\micro\ampere}' at 4.02,60


set multiplot

set grid mxtics mytics lt -1 lc rgb 'gray90'
plot NaN notitle
unset grid

set grid xtics ytics lt -1 lc rgb 'gray70'
plot NaN notitle
unset grid

plot NaN notitle

Id(x) = 347*sin(2*3.14*x) + 60
ID(x) = Id(x) >= 0 ? Id(x) : 0
plot    ID(x) w filledcurves above y1=0 lc rgb 'light-blue',\
        60 w lines lt 2 lw 3 lc rgb 'gray60',\
        ID(x) w lines lt 1 lw 5 lc rgb 'navy'

plot NaN notitle

unset multiplot


set out

結果

カーブがフレームからはみ出さないようにする試み。編集:

reset

#set term tikz size 17cm,10cm dashed standalone header '\usepackage{siunitx}'
#set out 'MosfetClassAbPower.tex'
#TSCALE = 1.0

set terminal pdfcairo dashed
set out 'MosfetClassAbPowerFixed.pdf'
TSCALE = 20.0 # use this value for e.g. pdfcairo or cairolatex

TITLE = 'MOSFET $I_D$ Vs Time'
YLABEL = 'Drain Current (in \si{\uA})'
XLABEL = 'Time (in \si{\ms})'

set style fill transparent solid 0.5 noborder

set xrange [0:4]
set xtics 0,0.5,4
set mxtics 4

set yrange [-50:450]
set mytics 4

set rmargin 5
LABEL = '\SI{60}{\uA}'
set label 1 LABEL at graph 1.01, first 60

unset key
set samples 1000

set multiplot

set title TITLE
set ylabel YLABEL
set xlabel XLABEL
unset border
set tics scale 0,0.001
set grid mxtics mytics lt -1 lc rgb 'gray90'
plot NaN
unset grid

# keep the current margins for all following plots
set lmargin at screen TSCALE*GPVAL_TERM_XMIN/(1.0*GPVAL_TERM_XSIZE)
set rmargin at screen TSCALE*GPVAL_TERM_XMAX/(1.0*GPVAL_TERM_XSIZE)
set tmargin at screen TSCALE*GPVAL_TERM_YMAX/(1.0*GPVAL_TERM_YSIZE)
set bmargin at screen TSCALE*GPVAL_TERM_YMIN/(1.0*GPVAL_TERM_YSIZE)

# unset almost everything
unset border
unset label
unset xlabel
unset ylabel
set format x ''
set format y ''
unset title

set grid xtics ytics lt -1 lc rgb 'gray70'
plot NaN
unset grid

Id(x) = 347*sin(2*3.14*x) + 60
ID(x) = Id(x) >= 0 ? Id(x) : 0
plot    ID(x) w filledcurves above y1=0 lc rgb 'light-blue',\
        60 w lines lt 2 lw 3 lc rgb 'gray60',\
        ID(x) w lines lt 1 lw 5 lc rgb 'navy'

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

set title TITLE
set ylabel YLABEL
set xlabel XLABEL
set label 1 LABEL at graph 1.01, first 60
set format x
set format y
set tics scale 1,0.5 front
set border
set border lw 2
plot NaN

unset multiplot
set out
4

1 に答える 1

2

すべてのプロット要素に異なるレイヤーを設定し、それらを任意に積み重ねることはできません。さまざまな要素を試してみる必要がありsetます。unset

  1. 目盛りを 1 回だけ描画するために、目盛りを に設定します0(これは主要な目盛りでは機能しますが、私が使用する小目盛りでは機能しません0.001)。

  2. マイナー グリッド線が描画された後、余白を修正します ( Gnuplot: 後で使用するためにプロット領域の寸法を保存するを参照)。

  3. 再描画されるべきではないすべての設定を解除します ( labelobjectarrow、目盛りラベルなど)。しないunset ticsでください。最後に描画したいのでset format x ''、目盛りを描画するためにのみ使用しますが、ラベルは描画しません。

  4. 目盛りをデフォルトのスケールに設定し、最後のプロットの前に境界線を設定して、グリッド線の上とプロットの上に描画されるようにします。

    reset
    set term tikz size 17cm,10cm dashed standalone header '\usepackage{siunitx}'
    set out 'MosfetClassAbPower.tex'
    TSCALE = 1.0
    
    # set terminal pdfcairo
    # TSCALE = 20.0 # use this value for e.g. pdfcairo or cairolatex
    
    set style fill transparent solid 0.5 noborder
    
    set title 'MOSFET $I_D$ Vs Time'
    set ylabel 'Drain Current (in \si{\uA})'
    set xlabel 'Time (in \si{\ms})'
    
    set xrange [0:4]
    set xtics 0,0.5,4
    set mxtics 4
    
    set yrange [-50:450]
    set mytics 4
    
    set rmargin 5
    set label 1 '\SI{60}{\uA}' at graph 1.01, first 60
    
    unset key
    set samples 1000
    
    set multiplot
    
    unset border
    set tics scale 0,0.001
    set grid mxtics mytics lt -1 lc rgb 'gray90'
    plot NaN
    unset grid
    
    # keep the current margins for all following plots
    set lmargin at screen TSCALE*GPVAL_TERM_XMIN/(1.0*GPVAL_TERM_XSIZE)
    set rmargin at screen TSCALE*GPVAL_TERM_XMAX/(1.0*GPVAL_TERM_XSIZE)
    set tmargin at screen TSCALE*GPVAL_TERM_YMAX/(1.0*GPVAL_TERM_YSIZE)
    set bmargin at screen TSCALE*GPVAL_TERM_YMIN/(1.0*GPVAL_TERM_YSIZE)
    
    # unset almost everything
    unset border
    unset label
    unset xlabel
    unset ylabel
    set format x ''
    set format y ''
    unset title
    
    set grid xtics ytics lt -1 lc rgb 'gray70'
    plot NaN
    unset grid
    
    set tics scale 1,0.5 front
    set border
    set border lw 2
    
    Id(x) = 347*sin(2*3.14*x) + 60
    ID(x) = Id(x) >= 0 ? Id(x) : 0
    plot    ID(x) w filledcurves above y1=0 lc rgb 'light-blue',\
            60 w lines lt 2 lw 3 lc rgb 'gray60',\
            ID(x) w lines lt 1 lw 5 lc rgb 'navy'
    
    unset multiplot
    set out
    

結果:

ここに画像の説明を入力

順序は次のとおりです。

  1. マイナー グリッド ライン
  2. 主グリッド線
  3. 曲線
  4. ボーダー、目盛り

他にもいくつかの小さな変更を加えたことに注意してください。たとえばgraph、座標を使用してラベルを設定できます。そして、ラベルテキストの微調整。

編集:

カイロラテックスまたはepslatex

上記の手順は、テキストとグラフィックスを一緒に処理する端末ではうまく機能しますが、モードで 2 つのテキストレイヤーしか認識cairolatexしないような端末では機能しません。epslatexmultiplot

  1. frontレイヤーには、frontキーワードで配置されたすべてのテキストが含まれます。
  2. plotグラフィックスには、すべてのコマンドのすべてのグラフィック要素が含まれています (multiplotモードでも)。
  3. backレイヤーには、backキーワードで配置されたすべてのテキストが含まれます。

これは、グラフィックの一部 (はみ出した線) を白いオブジェクトで覆いたいが、たとえば前面に置くことができない場合に問題になる可能性がありますxlabel。次の例も使用できcairolatexます。

reset

set terminal cairolatex pdf dashed color standalone header "\\usepackage{siunitx}" size 17cm,10cm
set output 'MosfetClassAbPowerFixed.tex'

TITLE = 'MOSFET $I_D$ Vs Time'
YLABEL = 'Drain Current (in \si{\uA})'
XLABEL = 'Time (in \si{\ms})'

set style fill transparent solid 0.5 noborder

set xrange [0:4]
set xtics 0,0.5,4
set mxtics 4
set yrange [-50:450]
set mytics 4

RMARGIN=0.92
LMARGIN=0.1
set rmargin at screen RMARGIN
set lmargin at screen LMARGIN
set tmargin at screen 0.91
set bmargin at screen 0.11

unset key
set samples 1000

set multiplot

# first plot the minor grid lines
unset border
set tics scale 0,0.001 format ''
set grid mxtics mytics lt -1 lc rgb 'gray90'
plot NaN

# now plot the major grid lines
unset grid
set grid xtics ytics lt -1 lc rgb 'gray70'
plot NaN
unset grid

# plot the actual curve
# overdraw borders on left and right
set object rectangle from graph -0.005, graph 0 to screen LMARGIN, graph 1 front \
  fillstyle solid noborder
set object rectangle from screen RMARGIN, graph 0 to graph 1.005, graph 1 front \
  fillstyle solid noborder
Id(x) = 347*sin(2*3.14*x) + 60
ID(x) = Id(x) >= 0 ? Id(x) : 0
plot    ID(x) w filledcurves above y1=0 lc rgb 'light-blue',\
        60 w lines lt 2 lw 3 lc rgb 'gray60',\
        ID(x) w lines lt 1 lw 5 lc rgb 'navy'

unset object
# plot all tics and labels
LABEL = '\SI{60}{\uA}'
set label 1 LABEL at graph 1.01, first 60 front
set title TITLE
set ylabel YLABEL
set xlabel XLABEL
set tics scale 1,0.5 format
set border
set border lw 2

plot NaN

unset multiplot
set out

レイヤーが 3 つしかないため、プロットの境界線と目盛ラベルの間に薄い白い長方形を置きました。オブジェクトをプロット領域の外に描画するには、座標に少なくとも 1 つの座標値を使用する必要screenがあります。そうしないと、オブジェクトがクリップされます。

最初の例とは対照的に、私はプロット全体に固定マージンを使用しました。

これは与える:

ここに画像の説明を入力

于 2013-10-02T07:56:19.503 に答える