2017-05-22 4 views
1

Ich bin kürzlich auf ein Beispiel gestoßen, wo Gnuplot (zumindest für mich) ein unerwartetes Ergebnis produziert, also habe ich mich gefragt, ob es tatsächlich das gewünschte Verhalten ist. Die Einrichtung ist folgende:Splot-Verhalten beim Plotten mit Linien

set terminal pngcairo 
set output plot3d?"plot1.png":"plot0.png" 

unset key 
set xtics nomirror 
set ytics nomirror 
set xr [0.5:2.5] 
set yr [-0.5:4.5] 

set multiplot layout 1,2 

$data0 << EOD 
1 2 1 
2 4 1 
1 3 1 


1 0 1 
2 2 1 
1 1 1 
EOD 

$data1 << EOD 
1 2 1 
2 4 1 
1 3 1 

1 0 1 
2 2 1 
1 1 1 
EOD 


if(plot3d){ 
    set view map 
    splot $data0 w lp, \ 
     '' u 1:2:3:(sprintf("%d", $0)) w labels offset char 0, char -0.5 

    splot $data1 w lp, \ 
     '' u 1:2:3:(sprintf("%d", $0)) w labels offset char 0, char -0.5 
}else{ 
    plot $data0 w lp, \ 
     '' u 1:2:(sprintf("%d", $0)) w labels offset char 0, char -0.5 

    plot $data1 w lp, \ 
     '' u 1:2:(sprintf("%d", $0)) w labels offset char 0, char -0.5 
} 

Die beiden Datenblöcke unterscheiden sich nur in der Leerraum, $data0 hat zwei Leerzeilen, während $data1 nur eine. Mit plot3d=1 erzeugt das Script (5,0 Patchlevel 6) enter image description here

Interessanterweise auch Nummern 1 und 4 in dem Datenblock $data1 verbunden sind. Diese Kante scheint zu verschwinden, wenn die leere Zeile auskommentiert ist. Abschweifend plotten (plot3d=0) ergibt sich ein erwartetes Ergebnis: enter image description here

ich wahrscheinlich bin fehlt etwas offensichtlich, obwohl die Dokumentation, dass zu erklären, scheint (vielleicht ist es irgendwie durch splot außer Kraft gesetzt):

Einzelne leere Aufzeichnungen benennen Diskontinuitäten in einem plot; Keine Linie verbindet Punkte, die durch leere Datensätze getrennt sind (wenn sie mit einem Linienstil gezeichnet werden).

Antwort

1

Ja, das von Ihnen beschriebene Verhalten ist korrekt für splot. Tatsächlich erwähnt das Zitat, das Sie zeigen, ausdrücklich plot und nicht splot. siehe splot Verhalten in der Dokumentation "splot> Daten-Datei", wo es heißt:

Einzel blank records getrennte Datenblöcke in einem splot Daten-Datei; splot behandelt Datenblöcke als das Äquivalent der Funktion y-Isolinien. Keine Linie verbindet Punkte, die durch einen leeren Datensatz getrennt sind. Wenn alle Datenblöcke die gleiche Anzahl von Punkten enthalten, zeichnet gnuplot übergreifende Isolinien zwischen Datenblöcken, die entsprechende Punkte verbinden. Dies wird als „Rasterdaten“, ... bezeichnet

So, im allgemeinen werden einzelne Leerzeilen verwendet, um gerasterte Daten für splot zu strukturieren oder mit every Auswählen von Datenpunkten und die Datenblocks zu ermöglichen.

Zwei leere Zeilen haben immer dieselbe Bedeutung, um zwei Datensätze zu trennen, die mit index ausgewählt werden können.

+0

danke für die gründliche erklärung ... :) meine frage wurde von jemandem vor kurzem [fragend] (https://stackoverflow.com/q/44055951/5351549) über seltsame konturen in einem 3d-plot, er/sie zeichnete die Konturen aus einer Datei (zuvor mit 'table' erzeugt) und das Ergebnis war ziemlich seltsam - der Grund schien genau zu sein, dass einzelne Konturen in der generierten Datei nur mit einer einzigen Leerzeile abgegrenzt waren ... – ewcz

Verwandte Themen