2016-09-28 6 views
3

Kurz gesagt, ich möchte eine Funktion schreiben, die scatter matrix und boxplot gleichzeitig in Python ausgeben wird. Ich dachte, ich würde dies tun, indem ich eine Figur mit einem 2x1 Plot-Array erstellt. Jedoch, wenn ich den Code unter Verwendung eines Jupyter Notebook laufen:Ausgabe von zwei Graphen gleichzeitig mit Matplotlib

def boxplotscatter(data): 
    f, ax = plt.subplots(2, 1, figsize = (12,6)) 
    ax[0] = scatter_matrix(data, alpha = 0.2, figsize = (6,6), diagonal = 'kde') 
    ax[1] = data.boxplot() 

ich, Daten mit pdf genannt:

enter image description here

Das ist nicht genau das, was ich erwartet hatte - ich ausgeben wollte der Streumatrix und darunter der Boxplot, nicht zwei leere Gitter und ein Boxplot, eingebettet in eine Streumatrix.

Gedanken zur Behebung dieses Codes?

Antwort

0

Das Problem hier ist, dass Sie nicht tatsächlich auf den erstellten Achsen plotten, Sie ersetzen nur den Inhalt Ihrer Liste ax. Ich bin nicht sehr vertraut mit der objektorientierten Schnittstelle für Matplotlib, aber die richtige Syntax würde mehr wie ax[i,j].plot() anstatt ax[i] = plot() aussehen. Nun ist die einzige wirkliche Lösung, die ich bieten kann, ist die funktionale Schnittstelle verwendet wird, wie folgt aus:

def boxplotscatter(data): 
    f, ax = plt.subplots(2, 1, figsize = (12,6)) 
    plt.subplot(211) 
    scatter_matrix(data, alpha = 0.2, figsize = (6,6), diagonal = 'kde') 
    plt.subplot(212) 
    data.boxplot() 
1

Ich denke, man muss nur die Achse als Argument Ihrer Plotten Funktion übergeben.

f, ax = plt.subplots(2, 1, figsize = (12,6)) 
def boxplotscatter(data, ax): 
    ax[0] = scatter_matrix(data, alpha = 0.2, figsize = (6,6), diagonal = 'kde') 
    ax[1] = data.boxplot() 
+0

Dadurch werden die überflüssigen leeren Gitter entfernt, aber der Boxplot wird nicht aus der eingebetteten Streumatrix herausgedrückt. –

+0

Hey, ich denke, dieses Verhalten ist fällig, weil Pandas Plotten bereits eine Figur innerhalb ihrer Funktion aufrufen. Das bedeutet, dass es immer angezeigt wird, wenn es angerufen wird. Wie auch immer, da die Funktion die Achsen zurückgibt, habe ich überprüft, ob es eine Möglichkeit gibt, diese Achsen von der Figur selbst zu entkoppeln und sie an ein Layout zu übergeben, das du willst (damit du später verschiedene Plots hinzufügen kannst). Wenn Sie dies lesen, stellt sich heraus, dass dies keine Option ist [link] (http://stackoverflow.com/questions/6309472/matplotlib-can-i-create-axessubplot-objects-then-add-them-to-a -figure-Instanz). – josecoto

+0

^Fühlen Sie sich frei, dies in seine eigene Antwort zu drehen, ich denke, das beantwortet es mehr oder weniger für mich. –

Verwandte Themen