2017-05-18 5 views
3

Ich versuche, zwei 2D-skalaren Größen zu zeichnen, eine als Heatmap und eine als überlagerte Kontur, mit dem folgenden Code:gnuplot: Kontur und Heatmap aus zwei verschiedenen Dateien im selben splot

set contour base 
set cntrparam levels incremental 0,0.25,1.25 
unset surface 
set table cont2.dat 
splot 'vr245.gnu' 
unset table 
reset 
set xrange [1:215] 
set yrange [0:3.1415925025940E+00] 
set cbrange [7:17] 
unset key 
set view map 
set palette rgbformulae 33,13,10 
splot 'f_aveFe_245.gnu' u 1:2:3 with pm3d, "cont2.dat" u 1:2:3 w l 

Ergebnis erzeugt von gnuplot Result produced by gnuplot

Wie Sie sehen können, hat die Kontur Artefakte auf der linken Seite. Wie kann ich dieses Problem beheben? Vielen Dank!

Input files are here.

Antwort

1

Es ist eigentlich ganz interessant. Das Problem scheint für eine bestimmte Kontur zu entstehen, die dem Niveau von 1.25 entspricht. Ich denke, ich habe das Problem auf Folgendes beschränkt.

Nehmen wir an, dass wir eine einfache Daten-Datei als

215 2.55865 1.25 
212.185 2.56004 1.25 
215 2.87839 1.25 

215 0.2632 1.25 
212.185 0.252052 1.25 
215 0.582938 1.25 

jetzt haben, den gnuplot-Kommando (s)

unset key 
set view map 

set xr [212:215.5] 
set yr [0:3] 

set xtics nomirror 
set ytics nomirror 

splot \ 
    'file.dat' w lp, \ 
    '' u 1:2:3:(sprintf("%d", $0)) w labels offset char 0, char -0.5 

produzieren enter image description here

Interessanterweise weist auch 1 und 4 beigetreten. Wenn die Datendatei als

215 2.55865 1.25 
212.185 2.56004 1.25 
215 2.87839 1.25 
# 
215 0.2632 1.25 
212.185 0.252052 1.25 
215 0.582938 1.25 
modifiziert

Gnuplot verbindet nur die Punkte 2 und 3, wie erwartet: enter image description here

Was hier zu helfen scheint, ist die Leerzeile zu kopieren, dh diese Datei

215 2.55865 1.25 
212.185 2.56004 1.25 
215 2.87839 1.25 


215 0.2632 1.25 
212.185 0.252052 1.25 
215 0.582938 1.25 

gibt in der Tat getrennt Komponenten: enter image description here

Um App ly diese in Ihrem Skript, könnte man zum Beispiel gawk und lediglich duplizieren alle leeren Zeilen in der Datei mit den berechneten Konturen aufrufen:

set terminal pngcairo 
set output 'fig.png' 

set contour base 
set cntrparam levels incremental 0,0.25,1.25 
unset surface 
set table 'cont2.dat' 
splot 'vr245.gnu' 
unset table 
reset 

set xrange [1:215] 
set yrange [0:pi] 
set cbrange [7:17] 
unset key 
set view map 
set palette rgbformulae 33,13,10 
splot \ 
    'f_aveFe_245.gnu' u 1:2:3 with pm3d, \ 
    '<gawk "NF==0{print;} {print;}" cont2.dat' u 1:2:3 w l 

, die unter Verwendung, könnte man dieses Problem beheben Alternativ enter image description here

gibt plot zu zeichnen die Konturen statt splot:

set terminal pngcairo 
set output 'fig.png' 

set contour base 
set cntrparam levels incremental 0,0.25,1.25 
unset surface 
set table 'cont2.dat' 
splot 'vr245.gnu' 
unset table 
reset 

set xrange [1:215] 
set yrange [0:pi] 
set cbrange [7:17] 
unset key 
set view map 
set palette rgbformulae 33,13,10 

set multiplot 

set tmargin at screen 0.9 
set lmargin at screen 0.1 
set rmargin at screen 0.8 
set bmargin at screen 0.1 

splot \ 
    'f_aveFe_245.gnu' u 1:2:3 with pm3d 

unset xtics 
unset ytics 
unset border 
unset key 
plot \ 
    'cont2.dat' w l 
1

Sie können wahlweise ein- oder ausgeschaltet werden Konturierung und plotten der Oberfläche für einzelne Parzellen in einem einzigen Splot. Definieren Sie sowohl pm3d und contours im Skript, deaktivieren Konturen für die erste und Oberfläche für die

reset 
set contour base 
set cntrparam levels incremental 0,0.25,1.25 
set cntrlabel onecolor 
set autoscale xfix 
set autoscale yfix 
set cbrange [7:17] 
unset key 
set view map 
set palette rgbformulae 33,13,10 
splot 'f_aveFe_245.gnu' u 1:2:3 with pm3d nocontour, \ 
    'vr245.gnu' u 1:2:3 w l lc rgb "black" nosurface 

enter image description here

Verwandte Themen