3

ここで説明するコマンド ファイルを使用してデータをプロットしています: gnuplot 等高線の色: スタイル ラインの設定と線種の設定が機能しない 別の出力オプションを提供したい。PNG は wxt ターミナルと同様にうまく機能しますが、これらは解像度が固定されています。たとえば、プロットを「ズームイン」すると、粗くなります。

端末に pdf または pdfcairo を使用すると、結果のファイルにモアレ パターンが含まれます。モアレ パターンが観察される画像内の領域は、pm3d コマンドで使用する補間量を増やすことによって減らすことができます。データセットには半径方向のポイントがたくさんありますが、角度データセットは多くないため、その「方向」にさらに補間する必要があります。補間を使用しないと非常に粗い pm3d 画像になるため、0,20 から 20,20、さらには 20,40 を試しています。残念ながら、多くの補間を行ってもモアレ パターンを完全に取り除くことはできず、ファイル サイズが巨大になり (たとえば、PNG ファイルは約 250kB ですが、pdf ファイルは 11MB を超えます)、その結果、レンダリングが非常に遅くなります。これらを Adob​​e Acrobat Reader 10.1.8 と GSview で表示しようとしましたが、結果は同じです。

PDF 形式はどこにでもあり、詳細を過度に失うことなく拡大できるため (PNG とは異なります)、PDF 形式の使用に興味があります。

以下は、さまざまなレベルの補間で得られた pdf 出力のパターンをキャプチャしたスクリーン ショットです。最初の画像は参照用の png ファイルで、モアレ パターンが表示されていません。ファイル サイズは 250kB です。

PNG レンダリング - モアレ パターンなし

次に、pm3d 補間なしの pdf 出力、ファイルサイズ 72kB: PDF出力のスクリーンショット。 pm3d 補間なし

次に、 を使用した pdf 出力set pm3d map interpolate 0,20、ファイル サイズ 1861kB: PDF出力のスクリーンショット。 pm3d 補間 0,20

次に、 を使用した pdf 出力set pm3d map interpolate 10,20、ファイル サイズ 5942kB: PDF出力のスクリーンショット。 pm3d 補間 10,20

set pm3d map interpolate 20,20最後に、ファイル サイズ 11515kB を使用した pdf 出力:PDF出力のスクリーンショット。 pm3d 補間 20,20

これらのモアレ パターンが PDF 出力で生成されるのはなぜですか? 解像度を(あまり)失うことなくズームインできるベクトル形式をまだ持つことができるようになりますか?

4

1 に答える 1

3

これは解決策ではなく、説明であり、醜い回避策ではありますが。

時々、gnuplotこの問題についてメーリングリストに報告がありますが、それは視聴者に関係しているようです. これはgnuplot、サーフェス プロットを作成する方法に関係しています。これらは、一緒にステッチされたポリゴンとして描画されます。表示されているモアレ パターンは、2 つのポリゴン間のレンダリングが間違っているためです。これは、ビューア、ビューアの設定、およびズーム倍率によって異なります。

その効果を示す最も簡単な例は、次の Postscript ファイルです。

%!PS-Adobe-2.0
50 50 moveto 50 0 rlineto 0 50 rlineto -50 0 rlineto closepath 0 setgray fill
100 50 moveto 50 0 rlineto 0 50 rlineto -50 0 rlineto closepath 0 setgray fill

このファイルをたとえば名前を付けて保存しmoire.psて表示するか、 で変換してps2pdf表示します。Acrobat Reader 9.5.1 では、次のように表示されます。

ここに画像の説明を入力

Acrobat Reader には、Preferences -> Page Display -> Enhance thin linesこの問題を回避できる設定がありますが、他の部分で問題が発生します。

私のシステム (Debian) では、すべてのビューアーに 、 、 、 libpoppler` などのパターンが表示mupdffirefoxghostscriptますpdftocairo

じゃあ何をすればいいの?私自身は、次の回避策を使用します。私splotpng高解像度で に移動し、後でそのファイルを で再読み込みしますplot ... with rgbimage。次に、ヒートマップをビットマップとして取得し、残りはベクトルです。ほとんどの場合、これは問題ではありません。何らかの方法で、解像度が制限された測定データがあり、それを補間するからです。

質問gnuplot 等高線の色に基づいて: スタイル ラインを設定し、線種を設定しないでください。これを実装する方法は次のとおりです。

reset 

set lmargin at screen 0.05
set rmargin at screen 0.85
set bmargin at screen 0.1
set tmargin at screen 0.9

set pm3d map interpolate 20,20
unset key

set cntrparam bspline
set cntrparam points 10
set cntrparam levels increment -6,-6,-24
set contour surface

set linetype 1 lc rgb "blue" lw 2 
set linetype 2 lc rgb "blue"
set linetype 3 lc rgb "black"
set linetype 4 lc rgb "orange"
set linetype 5 lc rgb "yellow"

set palette rgb 33,13,10 #rainbow (blue-green-yellow-red)
set cbrange [-18:0]

unset border
unset xtics
unset ytics

set angles degree
r = 3.31
set xrange[-r:r]
set yrange[-r:r]
set colorbox user origin 0.9,0.1 size 0.03,0.8

##################### start changes ##############
set autoscale fix
RES_X = 2000
RES_Y = 2000

save('settings.tmp')
set lmargin at screen 0
set rmargin at screen 1
set bmargin at screen 0
set tmargin at screen 1
unset colorbox

set terminal pngcairo size RES_X, RES_Y
set output '3d-polar-inc.png'
splot 'new_test.dat' nocontour

unset output
load('settings.tmp')

# mapping of the coordinates for the png plotting later
X0 = GPVAL_X_MIN
Y0 = GPVAL_Y_MIN
DX = (GPVAL_X_MAX - GPVAL_X_MIN)/real(RES_X)
DY = (GPVAL_Y_MAX - GPVAL_Y_MIN)/real(RES_Y)
C0 = GPVAL_CB_MIN
DC = GPVAL_CB_MAX - GPVAL_CB_MIN
C(x) = (x/255.0) * DC + C0

# now plot the png 
#set terminal pdfcairo size 10cm,10cm
#set output '3d-polar.pdf'
set terminal postscript eps color level3 size 10cm,10cm solid
set output '3d-polar-eps.eps'

set multiplot

set cbrange[GPVAL_CB_MIN:GPVAL_CB_MAX]
plot '3d-polar-inc.png' binary filetype=png \
     origin=(X0, Y0) dx=DX dy=DY \
     using (C($1)):(C($2)):(C($3)) \
     with rgbimage, \
     NaN with image t '' # hack for getting the colorbox

# plot the contours
unset surface
unset pm3d
splot 'new_test.dat' w l

###################### end changes #################

# now plot the polar grid only
set style line 11 lc rgb 'black' lw 2 lt 0
set grid polar ls 11
set polar
set logscale r 10
set rrange[10:20000]
unset raxis
set rtics format '' scale 0
#set rtics axis scale 
set rtics (20,50,100,200,500,1000,2000,5000,10000,20000)
do for [i=-150:180:30] {
dum = r+0.15+0.05*int(abs(i/100))+0.05*int(abs(i/140))-0.05/abs(i+1)
set label i/30+6 at first dum*cos(i), first dum*sin(i) center sprintf('%d', i)
}
set label 20 at first 0, first -(log(20)/log(10)-1) center "20"
set label 100 at first 0, first -(log(100)/log(10)-1) center "100"
set label 200 at first 0, first -(log(200)/log(10)-1) center "200"
set label 1000 at first 0, first -(log(1000)/log(10)-1) center "1k"
set label 2000 at first 0, first -(log(2000)/log(10)-1) center "2k"
set label 10000 at first 0, first -(log(10000)/log(10)-1) center "10k"
set label 20000 at first 0, first -(log(20000)/log(10)-1) center "20k"
plot NaN w l
unset multiplot
unset output

これpdfcairoを使用すると 1.7 MB の pdf ファイルが得られ、epslatex level3(このオプションは 4.7 開発バージョンでのみ使用可能です) を使用すると 1.5 MB の eps ファイルが得られ、これをepstopdfで 136 KB の pdf ファイルに変換できます。

Big data surface plotsに対する私の回答も参照してください: Call gnuplot from tikz to generate bitmap and include automatically? TeX.SX上。

于 2013-09-23T07:53:51.117 に答える