2016-03-21 8 views
0

Ich habe eine Datei, in der meine Daten in mehrere Indizes aufgeteilt sind. Ich möchte plotten einige oder alle der Indizes als gestapelt gefüllte Kurven, indem Sie die Werte der ausgewählten früheren Indizes zu den Werten des aktuellen Index hinzufügen. Ich konnte keinen Weg finden, die Summenfunktion wie bei Daten zu verwenden, die als Spalten in einem einzelnen Index angeordnet sind (wie in this question), selbst wenn die Pseudospalte (-2) als Indexnummer verwendet wird.Gnuplot Gestapelte gefüllte Kurven aus verschiedenen Indizes

Wichtiger Hinweis: Jeder Index als streng identische Mengen von x-Werten, nur die y-Werte unterscheiden sich.

Gibt es eine Möglichkeit etwas wie

p 'data.dat' index (sum(ind=1,3,4,5) ind) u 1:2 w filledcurve x1 t 'Sum(1,3,4,5)', '' index (sum(ind=1,2,5) ind) u 1:2 w filledcurve x1 t 'Sum(1,2,5)' 

innerhalb gnuplot zu tun oder muss ich auf ein Skript zurückgreifen (vielleicht eine Variation der in this answer)?

+0

Bitte, immer eine Beispieldatendatei, so dass wir das Problem und Test reproduzieren die Lösung. – Miguel

Antwort

0

Sie können dies mit Hilfe außerhalb von gnuplot (aufgerufen in gnuplot) tun. Stell dir vor, haben Sie die folgende Datendatei mit 4 Indizes (0 bis 3):

1 2 
2 3 


1 5 
2 5 


1 0 
2 3 


1 4 
2 3 

Jetzt sagen, dass wir 1 summieren möchten und 2 und 0 und 3. Die erste Summe zurückgeben sollte:

1 5 
2 8 

während die zweite Summe

1 6 
2 6 

zurückkehren sollen, können wir die Blöcke wählen wir set table wollen mit:

set table "sum1" 
plot for [i in "1 2"] "data3" index 0+i pt 7 not 

set table "sum2" 
plot for [i in "0 3"] "data3" index 0+i pt 7 not 
unset table 

Jetzt sed Rohrleitungen verwenden, um die leeren Zeilen zu entfernen und smooth freq für gleiche x-Werte zu summieren:

plot "< sed '/^\s*$/d' sum1" smooth freq t "sum1", \ 
    "< sed '/^\s*$/d' sum2" smooth freq t "sum2" 

enter image description here

+0

Es funktioniert wie ein Charme! Vielen Dank. – Jep

0

Obwohl Sie es vielleicht mit Funktionen und Variablen von Gnuplot 4.4+ tun können, wird dies nicht sehr effizient sein, da Sie eine Operation auf mehrere entfernte Zeilen in Ihrer Datei ausführen möchten, die tatsächlich eine Operation ist Arrays. Gnuplot ist dafür nicht gedacht, die Datendateien sollten eine Struktur haben, die ziemlich nahe bei dem liegt, was Sie plotten wollen. Ich rate, dass Sie versuchen, eine Datei mit einer solchen Struktur, z. haben Sie die Werte, die Sie in derselben Zeile in verschiedenen Spalten summieren möchten.

+0

Ich stimme zu, dass Gnuplot nicht mit Arrays umgehen soll. Aber ich kann nicht sagen, bevor ich sie geplottet habe, welche der Indizes ich für die letzte Handlung behalten werde. Die Idee hier ist, die Indizes, die nicht signifikant zum Gesamtwert beitragen, nicht zu plotten. Natürlich könnte ich jeden Index separat darstellen, entscheiden, welche beibehalten werden sollen, eine besser formatierte Datei erzeugen und die "getrimmten" Daten neu plotten. Wenn ich am Ende etwas schreibe, das genau das tut, werde ich es hier posten. Vielen Dank für Ihren Kommentar. – Jep

+0

Ich bin nicht sicher, warum es notwendig sein sollte, zwei Durchgänge zu machen. Sie sagen, Ihre Daten sind ein Array y = A (x, index). Anstatt A (:, i) für alle i (also insgesamt N Tabellen mit 2 Spalten) zu schreiben, schreiben Sie A (:, :)? (eine einzelne Tabelle von N + 1 Spalten). Dann kann gnuplot damit umgehen, was Sie tun möchten. – Joce