2017-04-16 4 views
0

ich eine Datei haben, sagen wir 6 x 2, die die Daten von drei 2 von 2 Matrizen enthält:Gnuplot: plot spezifische Matrix aus einer Datei mit vielen Matrizen

1 2 
3 2 
1 5 
6 2 
8 5 
2 7 

Jetzt möchte ich in der Lage sein, spezifisch plotten Matrizen dieser Datei. Wie die Matrix

1 5 
6 2 

Für meine andere Dateien, in denen ich ein eindimensionalen Daten verwende ich ::1::10 wenn ich Daten aus den ersten zehn Zeilen darstellen möge.

Bit wie kann ich das für Matrizen tun?

Antwort

1

Sie können den Block/die Matrix von Interesse "manuell" auswählen und dann diese vorverarbeitete Eingabe an Gnuplot übergeben, um sie zu visualisieren. Zum Beispiel:

getMatrix(fName, i) = sprintf("<sed -n -e'%d,%dp' '%s'", 2*i-1, 2*i, fName) 

plot getMatrix('test.dat', 2) matrix w image 

Hier Gnuplot „sieht“ nur der Ausgang des sed Befehls, der aus der Datei filtert test.dat nur Linien 3 und 4, das heißt die Matrix Sie in Ihrem Beitrag zeigen.

EDIT:

Die Anweisung

getMatrix(fName, i) = sprintf("<sed -n -e'%d,%dp' '%s'", 2*i-1, 2*i, fName) 

eine Funktion zum gegebenen Dateinamen und den Matrixindex (angenommen 1-Basis sein) definiert, welche Konstrukte zunächst eine Zeichenfolge, die den Plottbefehles enthält, die dann übergeben wird zu plot. Beispiel: Für i=1 und Datei test.dat sieht der Befehl wie <sed -n -e'1,2p' 'test.dat' aus. Wenn man Gnuplot anweist, ein solches "Ding" zu zeichnen, führt es den Befehl nach dem führenden < aus und zeichnet seine Ausgabe (anstelle der gesamten Datei test.dat). In diesem speziellen Fall extrahiert sed nur Zeilen mit Zeilennummern (1-basiert) von 1 bis 2 (inklusive).

Um dies N für Matrizen der allgemeinen Größe zu erweitern (unter der Annahme, dass die Datei verarbeitet wird entsprechende Anzahl von Spalten), könnte man zum Beispiel tun:

unset key 

getMatrix(fName, N, i) = sprintf("<sed -n -e'%d,%dp' '%s'", (i-1)*N + 1, i*N, fName) 

do for [i=1:2] { 
    plot getMatrix('test.dat', 10, i) matrix w image 
    pause 5 
} 

Die einzige hier Änderung ist die zusätzlichen Parameter N Bezeichnet die Größe der einzelnen Matrizen und wie der Zeilenbereich berechnet wird ...

+0

Können Sie die Zeile 'getMatrix (fName, i) = sprintf (" Samuel

+0

@Samuel Ich habe in der Antwort mehr Details zur Adressierung dieser ... – ewcz

+0

Perfect. Klappt wunderbar! – Samuel

Verwandte Themen