Stopfte einen Pandas DataFrame.plot in ein Matplotlib-Subplot

8

Mein Gehirn tut weh

Ich habe einen Code, der 33 Grafiken in einer langen Spalte erzeugt

%Vor%

Ich würde gerne jeden dieser Punkte in die Figur bringen, die ich oben kommentiert habe, aber alle meine Versuche scheitern. Ich habe versucht, ax=i in den Plot-Befehl zu setzen und bekomme 'numpy.ndarray' object has no attribute 'get_figure' . Auch, wenn ich zurück skaliere und dies mit einer einzelnen Zeichnung in einer einzelnen Figur mache, gehen meine x- und y-Skalen beide in den Hacken. Ich fühle mich, als ob ich der Antwort nahe bin, aber ich brauche einen kleinen Stoß. Danke.

    
Kevin Thompson 23.02.2014, 00:20
quelle

2 Antworten

13

Die Achsen behandeln, dass subplots returns je nach Anzahl der angeforderten Teilplots variieren:

  • für (1x1) erhalten Sie einen einzigen Handle,
  • für (n x 1 oder 1 x n) erhalten Sie ein 1d Array von Griffen,
  • Für (m x n) erhalten Sie ein 2D-Array von Handles.

Es scheint, dass Ihr Problem von der Änderung der Schnittstelle vom 2. bis zum 3. Fall (d. h. 1. bis 2. Achse) entsteht. Die folgenden Snippets können Ihnen helfen, wenn Sie nicht vorher wissen, wie die Array-Form aussieht.

Ich habe numpys unravel_index nützlich gefunden, um über die Achsen zu iterieren, z. B .:

%Vor%

Sie können das zurückgegebene Array auch so umformen, dass es linear ist (wie ich es in dieser Antwort verwendet habe):

%Vor%

Wie in der verknüpften Lösung angemerkt, muss axs ein wenig massiert werden, wenn Sie 1x1 Unterplots haben (und dann ein einzelnes Achsenhandle erhalten; axs = np.array(axs) ist genug).

Und nachdem Sie die Dokumente genauer gelesen haben (oops), setzen Sie squeeze=False forces subplots , um unabhängig von der Auswahl von ncols / nrows eine 2d-Matrix zurückzugeben. ( squeeze ist standardmäßig auf True gesetzt).

Wenn Sie dies tun, können Sie entweder über zwei Dimensionen iterieren (wenn es für Ihre Daten natürlich ist) oder einen der obigen Ansätze verwenden, um Ihre Daten linear zu durchlaufen und einen 2d-Index in ax zu berechnen.

    
Bonlenfum 23.02.2014, 12:00
quelle
0

Erweitern Sie die Antwort von Bonlenfum, hier ist eine Möglichkeit, dies mit einer groupby-Klausel zu tun:

%Vor%

Auf diese Weise können wir den Titel in unseren Diagrammen verwenden und auch Gruppen mit fehlenden Werten (d. h. 1, 3, 8)

berücksichtigen     
camdenl 27.08.2014 15:23
quelle

Tags und Links