Erstellen Sie ein Multiline-Plot aus der .CSV-Datei in Matplotlib

8

Ich habe seit Wochen versucht, 3 Sätze von (x, y) Daten auf dem gleichen Plot aus einer .CSV-Datei zu plotten, und ich komme nirgendwohin. Meine Daten waren ursprünglich eine Excel-Datei, die ich in eine .CSV-Datei konvertiert habe und pandas verwendet habe, um sie in IPython gemäß dem folgenden Code zu lesen:

%Vor%

Meine Daten haben folgendes Format:

%Vor%

Ich versuche, time1 vs mag1 , time2 vs mag2 und time3 vs mag3 zu zeichnen, alle auf der gleichen Handlung, aber stattdessen bekomme ich Diagramme von time.. vs Type , z. für den Code:

%Vor%

Ich bekomme 'ExpTime1.3' (y-Achse) gegen M0 bis M6 (x-Achse) gezeichnet, wenn ich will 'ExpTime1.3' vs 'LimMag1.3' , mit x-labels M0 - M6 .

  1. Wie bekomme ich 'ExpTime..' vs 'LimMag..' plots, mit allen 3 Datensätzen auf der gleichen Handlung?

  2. Wie bekomme ich die Bezeichnungen M0 - M6 auf der x-Achse für die 'LimMag..' -Werte (auch auf der x-Achse)?

Seit askewchans Lösungen, die aus unbekannten Gründen keine Plots zurückgegeben haben, habe ich festgestellt, dass ich ein Diagramm von ExpTime vs LimMag mit df['ExpTime1.3'].plot(), erhalten kann, wenn ich den Dataframe Index (df.index) ändere ) zu den Werten der x-Achse (LimMag1.3). Dies scheint jedoch zu bedeuten, dass ich jede gewünschte x-Achse in den Datenrahmenindex umwandeln muss, indem manuell alle Werte der gewünschten x-Achse eingegeben werden, um sie zum Datenindex zu machen. Ich habe sehr viele Daten, und diese Methode ist einfach zu langsam, und ich kann nur einen Satz von Daten gleichzeitig aufzeichnen, wenn ich alle 3 Reihen für jeden Datensatz in dem einen Diagramm aufzeichnen muss. Gibt es einen Weg um dieses Problem zu umgehen? Oder kann jemand einen Grund und eine Lösung anbieten, warum ich überhaupt keine Pläne mit den Lösungen von askewchan bekommen habe? \

Als Antwort auf nordev habe ich die erste Version noch einmal probiert, es werden keine Plots produziert, nicht einmal eine leere Figur. Jedes Mal, wenn ich einen der ax.plot -Befehle eintrage, erhalte ich eine Ausgabe vom Typ:   [<matplotlib.lines.Line2D at 0xb5187b8>] , aber wenn ich den Befehl plt.show() eingeben, passiert nichts. Wenn ich plt.show() nach der Schleife in askewchans zweite Lösung eintrage, erhalte ich einen Fehler und sage AttributeError: 'function' object has no attribute 'show'

Ich habe ein wenig mehr mit meinem ursprünglichen Code herumgespielt und kann nun ein Diagramm von ExpTime1.3 vs LimMag1.3 mit dem Code df['ExpTime1.3'][:7].plot() erhalten, indem ich den Index auf dieselbe Weise wie die x-Achse mache (LimMag1.3) , aber ich kann die anderen beiden Datensätze nicht auf demselben Diagramm abrufen. Ich würde mich freuen, wenn Sie weitere Vorschläge haben. Ich benutze ipython 0.11.0 über Anaconda 1.5.0 (64bit) und Spyder unter Windows 7 (64bit), Python-Version ist 2.7.4.

    
user2324693 15.05.2013, 15:19
quelle

2 Antworten

11

Wenn ich Sie richtig verstanden habe, sowohl von dieser Frage als auch von Ihrer vorheriges zum selben Thema , sollten die folgenden grundlegenden Lösungen sein, die Sie an Ihre Bedürfnisse anpassen können.

Mehrere Unterplots:

Beachten Sie, dass diese Lösung so viele Unterplots ausgeben wird, wie Spektralklassen (M0, M1, ...) vertikal auf derselben Figur liegen. Wenn Sie das Diagramm jeder Spektralklasse in einer separaten Figur speichern möchten, benötigt der Code einige Änderungen.

%Vor%

Alle in gleichen Achsen, gruppiert nach Zeilen (M0, M1, ...)

Hier ist eine andere Lösung, um alle verschiedenen Spektralklassen in denselben Achsen mit einer Legende zu versehen, die die verschiedenen Klassen identifiziert. Das plt.yscale('log') ist optional, aber es wird empfohlen, wie die Werte einen so großen Bereich abdecken.

%Vor%

Alle in gleichen Achsen, gruppiert nach Spalten (1.3 ", 2.0", 2.5 ")

Eine dritte Lösung ist wie unten gezeigt, wo die Daten nach der Reihe (Spalten 1,3 ", 2,0", 2,5 ") anstatt nach der Spektralklasse (M0, M1, ...) gruppiert sind. Dieses Beispiel ist sehr ähnlich zu @ askewchans Lösung. Ein Unterschied ist, dass die y-Achse hier eine logarithmische Achse ist, was die Linien ziemlich parallel macht.

%Vor%

    
hooy 16.05.2013 08:57
quelle
2

Sie können pyplot.plot(time, mag) drei verschiedene Male in derselben Figur aufrufen. Es wäre klug, ihnen ein Etikett zu geben. Etwas wie das:

%Vor%

Wenn Sie es loopen möchten, würde dies funktionieren:

%Vor%     
askewchan 15.05.2013 15:48
quelle

Tags und Links