2016-03-21 10 views
0

Ich habe mehrere Dateien, jeweils mit der gleichen Anzahl von Zeilen. Dateien heißen "something_integer.txt" wie "a100.txt", "a200.txt", "a300.txt" ... und so (Integer ist alle 100 und etwas ist immer das Gleiche). Jede Zeile ist zeitlich mit derselben Zeile der anderen Dateien verbunden, ist aber nicht mit anderen Zeilen verbunden.Gnuplot: Plot von Nummer und von Datei

Ich möchte alle Zeile 1 aller Dateien in einem einzigen Diagramm, alle Zeile 2 aller Dateien in einem anderen Diagramm (aber überlagert mit dem vorherigen) und so. Wie kann ich das mit gnuplot machen?

Ich weiß, dass ich eine for-Schleife verwenden muss. Ich war in so etwas wie (nur für Zeile 1 und Zeile 2) denken:

do for [i=100:5000:100] { 
    plot sprintf('something_%d.txt',i) every 1::1::1 using ¿¿¿¿¿????:5, 
     sprintf('something_%d.txt',i) every 1::2::2 using ¿¿¿¿¿????:5 
} 

aber Fragen:

  1. Wo ich setzen "¿¿¿¿¿????" Weil ich den Wert von Spalte 5 als y darstellen möchte, aber als x den Wert i, nicht den Wert von Spalte i. Wie können Sie das tun?
  2. Wenn jedes Mal, wenn die Schleife fortgesetzt wird, ich eine Zeichenanweisung habe, werden die vorherigen Punkte gelöscht? Werden sie verbunden sein, wie ich will?

Antwort

0

Die erste Frage ist einfach: Sie Klammer using (i):5

verwenden, wenn ich für die zweite richtig, zu verstehen, muss man die Schleife innerhalb des plot bewegen:

plot for [i=100:5000:100] \ 
    sprintf('something_%d.txt',i) every 1::1::1 using (i):5, \ 
    sprintf('something_%d.txt',i) every 1::2::2 using (i):5 

Ist Das was du wolltest?

+0

Nicht genau. Das ist ok für den Anfang, aber ich möchte alle Punkte der Reihe 1 zwischen ihnen mit einer Linie und alle Punkte der Reihe 2 mit einer anderen Linie verbinden. Damit ist jeder Punkt wie eine "Datenserie". –

0

Ich denke, dies in Gnuplot zu tun ist Overkill (aber ich mag Overkill-Lösungen!). Sie sind besser mit einer Vorverarbeitung in bash mit awk oder etwas Ähnliches. Sie können jedoch weiterhin den Befehl awk in Ihrem gnuplot-Code verwenden. Das tut, was Sie wollen:

loop = ""; do for [i=100:5000:100] { loop = sprintf("%s %i", loop, i) } 

file(n) = "< for i in ".loop."; do awk -v i=$i 'NR==".n."{print i, $5}' a${i}.txt; done" 

plot file(1) w l, file(2) w l 

n der Reihe ist, dass Sie die Auswahl, so dass file(1) keine wählt rudern. 1 in allen Ihren Dateien und file(2) wählt Zeilennr. 2 in all deinen Dateien und so weiter.

Verwandte Themen