2012-10-10 4 views

Antwort

30

Es ist definitiv möglich und Ihre Datendatei ist bereits das richtige Format. Die Funktionalität Sie suchen in columnheader(N) gebaut wird, die die Daten an der Spitze der N-ten Spalte liest und verwendet sie als Handlung Titel:

plot 'test.dat' i 0 u 1:2 w lines title columnheader(1),\ 
     'test.dat' i 1 u 1:2 w lines title columnheader(1) 

die Iteration kondensiert werden kann:

plot for [IDX=0:1] 'test.dat' i IDX u 1:2 w lines title columnheader(1) 
+0

Ich habe versucht, 'columnheader (1)' für * meine * Datafile-Format (mit den Titeln als Kommentar), aber es hat nicht funktioniert. Sie haben jedoch Recht, für das Format des ursprünglichen Posters, und ich bin froh, dass es so eine einfache Lösung gibt! – andyras

+0

@andyras - Weil du den Titel "data" auskommentiert hast und gnuplot ihn ignoriert hat. Soweit ich das beurteilen kann, werden '#' Zeilen in Datendateien von allem ignoriert, während Zeilen, die nicht analysiert werden (z. B. nicht-numerisch), beim Plotten ignoriert werden, aber sie sind immer noch für spezielle Funktionen wie 'Spaltenkopf' verfügbar. – mgilson

+0

Aus irgendeinem Grund verursacht die Verwendung der ersten vorgeschlagenen Methode Probleme mit "ziemlich großen" Dateien. Ich versuche, eine 2-GB-Datei zu plotten, ich habe 32 GB RAM, und ich habe keinen Speicher mehr, weil meine "test.dat" 50 Datenreihen enthält, daher habe ich einen "Plot" -Befehl mit 50 Plotbefehlen . Es sieht so aus, als ob GNUPLOT die 2GB-Datei 50 mal in den Speicher lädt, was dazu führt, dass ich keinen Speicher mehr habe. !? – user3728501

1

mit einer geringfügigen Änderung Ihrer Datensatzes (so dass die Titel wie Kommentare sind angegeben):

plot 'data.dat' i 0 t "p = 0.1", '' i 1 t "p = 0.2" 

:

#"p = 0.1" 
1 1 
3 3 
4 1 


#"p = 0.2" 
1 3 
2 2 
5 2 

Sie diese beiden Datensätze als separate Zeilen wie diese dargestellt werden können, Die Option index (i) für den Plotbefehl teilt gnuplot mit, den i ten Datensatz zu plotten. Ich finde keinen Weg, Gnuplot zu bekommen, um die Titel automatisch aus der Kopfzeile zu bekommen, weshalb ich sie manuell mit der Option title (t) spezifiziert habe.

+0

Dank! Es wäre der springende Punkt gewesen, Gnuplot dazu zu bringen, die in der Datei angegebenen Titel zu verwenden. Aber wenn das wirklich nicht möglich ist, dann muss ich es so machen, wie du es vorgeschlagen hast :-( – gTcV

+2

@andyras - Du kannst die Titel natürlich automatisch bekommen :-). Der Trick ist 'columnheader' (siehe meine Antwort). – mgilson

4

Eine Lösung von andyras gegeben auf Antworten basieren (answer 1 und answer 2) alle Prozesse zu automatisieren ist zu verwenden:

datafile = 'test.dat' 
stats datafile 
plot for [IDX=1:STATS_blocks] datafile index (IDX-1) u 1:2 w lines t\ 
columnheader(1) lc variable 

Damit erkennt das Skript automatisch die Anzahl der Datenblöcke und zeichnet diese mit unterschiedlichen Farben und mit dem entsprechenden Titel in der ersten Zeile jedes Datenblocks auf.

+0

In welcher Version haben Sie getestet? Am 5.0.3 Ich brauchte ein paar Fixes, damit das funktioniert: http://StackOverflow.com/a/39211206/895245 –

2

gnuplot 5,1 (2016/08/28)

Dies ist ähnlich https://stackoverflow.com/a/29495496/895245 aber mit einigen Korrekturen für spätere Versionen.

Script:

datafile = 'test.dat' 
stats datafile nooutput 
plot for [IDX=0:STATS_blocks-1] \ 
    datafile \ 
    index IDX \ 
    using 1:2 \ 
    with lines \ 
    title columnheader(1) 

Testdaten:

a 
1, 1 
2, 2 
3, 3 


"b" 
1, 1 
2, 4 
3, 9 


"c, c" 
1, 1 
2, 8 
3, 27 

Ausgang:

Diese auf 2016.08.28 arbeitet, die später 5.1 werden wird, aber nicht in 5.0.3 (Ubuntu 16.04), weil in 5.0.3 der stats Befehl gibt ein Fehler, weil die Spaltenüberschriften keine gültigen Daten sind. Und am 28. August 2016 wurde es nur eine Warnung.

Ich habe gefragt, wie die Warnung bei entfernen: https://groups.google.com/forum/#!topic/comp.graphics.apps.gnuplot/Pi4aBE2PwZ8

Mit Kommentaren wie:

#a 
1, 1 
2, 2 
3, 3 

nicht in entweder arbeiten Version, die ich getestet habe, ist es einfach ignoriert.

3

Dies ist Bruce_Warrior's und Ciro Santilli's Antworten, aber ohne die Zwischen stats:

# plot.gpi 
datafile = ARG1 
plot for [i=0:*] datafile index i using 1:2\ 
with lines title columnheader(1) 

Die for Schleife direkt über alle Datensätze in einer Datei laufen kann. Es funktioniert in gnuplot 5.0.5, aber ich bin mir nicht sicher, wenn for diese Fähigkeit erworben hat. Es ist dokumentiert in the 5.0 manual, aber nicht the 4.6 manual.

Wenn die Linienfarbe nicht durch eine dritte Eingabespalte bestimmt wird, die von linecolor variable verbraucht wird (nach Bruces Antwort), wird gnuplot automatisch verschiedene Farben und Linienstile zuweisen. In diesem speziellen Fall kann using 1:2 auch weggelassen werden.

$ gnuplot --version 
gnuplot 5.0 patchlevel 5 
$ gnuplot --persist -c plot.gpi test.dat 

Plot de

test.dat ist

"p = 0.1" 
1 1 
3 3 
4 1 


"p = 0.2" 
1 3 
2 2 
5 2 
+0

Schön zu lernen, dass '*' in 'for' viele nützliche Dinge wesentlich einfacher machen kann. Es gibt jedoch wahrscheinlich andere Situationen, in denen wir die Anzahl der Blöcke anderswo benötigen und daher immer noch "Statistiken" verwenden müssen. Zum Beispiel brauche ich jetzt 'STATS_blocks', um Schritte durch die Palette zu berechnen, um einen glatten Bereich von Farben zu erzeugen. –

Verwandte Themen