2016-07-01 31 views
1

Ich weiß, dass mit Xmgrace, wenn ich eine Datei mit mehreren Spalten habe Ich kann eine bestimmte Spalte als Funktion von anderen (sagen wir 3 vs 1) mit der BefehlXmgrace: plotten alle Spalten in mehreren Spalten Datei als Funktion der ersten

xmgrace -block file.dat -bxy 1:3 

wenn ich 2vs1 und 3vs1 im selben Fenster dargestellt werden soll, werde ich einfach den Befehl

xmgrace -block file.dat -bxy 1:2 -block file.dat -bxy 1:3 

Aber wenn die Dateien enthält eine große Anzahl von Spalten und ich möchte alle plotten von ihnen als eine Funktion der ersten (2vs1, 3vs1, 4vs1 usw.) im selben Fenster wird es unpraktisch, diese Co zu verwenden mmand.

Gibt es einen einfachen Befehl, um alle Spalten in einer Datei als eine Funktion der ersten (2vs1, 3vs1 usw.) zu plotten?

Ich habe

versucht
for i in {2..n}; do xmgrace -block file.dat -bxy 1:$i; done 

Aber auf diese Weise die Grundstücke in verschiedenen Fenstern ...

Antwort

2

Die nxy-Option wurde entwickelt, um dies zu tun.

xmgrace -nxy file.dat 

Mit dieser Option liest xmgrace die erste Spalte von file.dat als x-Daten und jeder andere Spalte als y (i) -Daten, und die Kurven y (i) vs x in der gleichen Grafik (mit verschiedene Farben standardmäßig).

+0

Ja, das ist die richtige Lösung, wenn Sie alle Datenreihen auf den gleichen Achsen haben wollen. – feedMe

1

Kurze Antwort erscheint:

Das schafft einzelne Plot-Dateien für jede Datenreihe vs Spalte 1:

for i in {2..7}; do `gracebat -nosafe -hdevice PNG -printfile $i.png -block a.txt -bxy 1:$1`; done 

Lange Antwort:

Wenn Sie alle Spalten (von Nummer 2 bis und einschließlich z. Spalte 7) vs Spalte 1 auf den gleichen Achsen Sie tun können:

for i in {2..7}; do echo -n " -block file.dat -bxy 1:$i"; done | xargs xmgrace 

Aber da Ihre Frage für einzelne Parzellen zu fragen ist wir können dies tun:

for i in {2..7}; do echo -n " -block file.dat -bxy 1:$i" | xargs xmgrace; done 

oder das, was geben Sie das gleiche Ergebnis, aber ist einfacher:

Allerdings ist dies nicht sehr praktisch, weil die indivi zwei Diagramme erscheinen nacheinander und jedes muss geschlossen werden, damit das nächste erscheint.

Es wäre besser, xmgrace im Batch-Modus laufen zu lassen und ein Bild von jedem Plot für Sie zu speichern. Sie können dies mit einer xmgrace Batch-Datei und mit der ausführbaren Datei gracebat tun.

for i in {2..7}; do `gracebat -nosafe -batch save.bfile -block a.txt -bxy 1:$1`; done 

Dies erfordert Gnade im Batch-Modus mit den gleichen Daten wie bisher, sondern läuft die Batch-Befehle in save.bfile gespeichert, das enthält:

PRINT TO "out.ps" 
PRINT 

Das offensichtliche Problem dabei ist, dass jede neue Iteration überschreibt die out.ps Postscript-Datei, da der Name der Ausgabedatei in unserer Batchdatei fest codiert ist! Sie sehen also immer nur den letzten in der Datei. Zum Glück können wir sed verwenden, um die Batchdatei jedes Mal zu ändern, bevor wir gracebat aufrufen!

for i in {2..7}; do `sed -e "s/outName/${i}/g" save.bfile > new.bfile`; `gracebat -nosafe -batch new.bfile -block a.txt -bxy 1:$1`; done 

Wo save.bfile jetzt

PRINT TO "outName.ps" 
PRINT 

und die Zeichenfolge enthält outName wird von $ i ersetzt.

Sie sollten nun eine Ladung von .ps-Dateien mit Ihren Plots darin haben. Spielen Sie mit der Batch-Datei herum, um mehr Dinge damit zu tun. Weitere Befehle, die Sie einschließen können, finden Sie unter this page. Sie erfahren auch, wie Sie das Ausgabedateiformat ändern können.

Alternativ können Sie zusammen mit der Batch-Dateien überspringen:

for i in {2..7}; do `gracebat -nosafe -hdevice PNG -printfile $i.png -block a.txt -bxy 1:$1`; done 

Wenn Sie eine Parameterdatei haben, können Sie den -param Befehl hinzufügen Stile zu setzen.

+0

Ich brauchte alle von ihnen auf der gleichen Achse. Ich war nicht klar genug. Vielen Dank, ich kann viel vom Rest der Antwort lernen :) – valerio