Gnuplot: bedingtes Plotten ($ 2 == 15? $ 2: '1/0') mit Linien
Meiner Daten sieht wie folgt aus:
10:15:8:6.06000000: 10:15:2:19.03400000: 10:20:8:63.50600000: 10:20:2:24.71800000: 10:25:8:33.26200000: 10:30:8:508.23400000: 20:15:8:60.06300000: 20:15:2:278.63100000: 20:20:8:561.18000000: 20:20:2:215.46600000: 20:25:8:793.36000000: 20:25:2:2347.52900000: 20:30:8:5124.98700000: 20:30:2:447.41000000: (...)
Ich würde gerne ein Grundstück "linespoints" Grundstück mit $1 auf der x-Achse, und 8 unterschiedliche Linien für jede Kombination von ($2,$3), z.B.: (15,8), (15,2), ...
Um das zu tun diese Art der bedingten Plotten, Menschen vorschlagen, die folgenden:
plot 'mydata.dat' using 1:($2==15 && $3==8 ? $4 : 1/0) with linespoints 'v=15, l=8'
Aber gnuplot nicht in der Lage ist zu zeichnen Sie eine Linie durch diese Punkte, wie "1/0" ist ungültig und eingefügt zu ersetzen, die einzelnen Datenpunkte, für die ($2==15 && $3==8) nicht zu halten.
Auch der Vorschlag, "- plot mit dem letzten Datenpunkt wieder" an Stelle von "1/0" funktioniert nicht, da bin ich mit Bedingungen, die auf zwei Variablen.
Gibt es wirklich keine Möglichkeit zu sagen, gnuplot zu ignorieren, einen Eintrag in der Datei, in der Stelle des Auftragens eine ungültige "1/0" Datenpunkt? Beachten Sie, dass das ersetzen es durch "NaN" ergibt das gleiche Ergebnis.
Denn jetzt bin ich der Vorverarbeitung alle meine Daten-Dateien (durch Aufteilung in separate Dateien, die dann geplottet werden in der gleichen Grundstück) mit bash und awk, aber dies ist weniger als ideal...
Dank!
InformationsquelleAutor der Frage Bas van Schaik | 2012-06-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
+1 für eine großartige Frage. Ich (fälschlicherweise) gedacht hätte, dass das, was Sie hatte, funktionieren würde, aber ein Blick auf
help datafile using examples
zeigt, dass ich war in der Tat falsch. Das Verhalten, das Sie sehen, ist, wie dokumentiert. Vielen Dank für die Lehre mich, etwas neues über gnuplot heute 🙂"Vorverarbeitung" ist (anscheinend), was hier nötig ist, aber temporäre Dateien werden nicht (so lange, wie Sie Ihre version von gnuplot pipes unterstützt). Etwas so einfaches wie dein Beispiel oben kann alles getan werden, innen ein gnuplot-Skript (obwohl gnuplot noch brauchen, um die Auslagerung der "Vorverarbeitung", um ein anderes Dienstprogramm).
Hier ist ein einfaches Beispiel, das zu vermeiden wird die temporäre Datei generation, aber verwenden
awk
zu tun, die "heavy-lifting".Beachten Sie das "< awk ...". Gnuplot öffnet sich eine shell, führt den Befehl aus, und liest das Ergebnis wieder aus dem Rohr. Keine temporären Dateien erforderlich. Natürlich, in diesem Beispiel, wir hätten
{print $1,$4}
(statt{print $0}
) und aufgehört mit der Spezifikation alle zusammen z.B.:wird auch funktionieren. Beliebigen Befehl auf Ihrem system die schreibt auf standard-Ausgabe zu arbeiten.
Können Sie auch verwenden, Rohre:
Wie bei jeder Programmiersprache, denken Sie daran, nicht um das ausführen von nicht vertrauenswürdigen Skripts:
Nicht gnuplot Spaß?
InformationsquelleAutor der Antwort mgilson