2016-06-28 6 views
9

Ich versuche, die folgende Handlung aus dem Buch Einführung in die statistische Lernen mit Seaborn enter image description heremehrere verschiedene Grundstücke in einer Figur mit Seaborn Plotten

ich speziell lmplot ist dies mit Seaborn neu erstellen möchten, erstellen Sie die ersten beiden Plots zu erstellen und boxplot um den zweiten zu erstellen. Das Hauptproblem ist, dass lmplot ein facetgrid entsprechend to this answer erzeugt, das mich zwingt, hackily eine andere matplotlib Achsen für den Boxplot hinzuzufügen. Ich habe mich gefragt, ob es einen einfacheren Weg dafür gibt. Im Folgenden muss ich einige manuelle Manipulationen vornehmen, um die gewünschte Handlung zu erhalten.

seaborn_grid = sns.lmplot('value', 'wage', col='variable', hue='education', data=df_melt, sharex=False) 
seaborn_grid.fig.set_figwidth(8) 

left, bottom, width, height = seaborn_grid.fig.axes[0]._position.bounds 
left2, bottom2, width2, height2 = seaborn_grid.fig.axes[1]._position.bounds 
left_diff = left2 - left 
seaborn_grid.fig.add_axes((left2 + left_diff, bottom, width, height)) 

sns.boxplot('education', 'wage', data=df_wage, ax = seaborn_grid.fig.axes[2]) 
ax2 = seaborn_grid.fig.axes[2] 
ax2.set_yticklabels([]) 
ax2.set_xticklabels(ax2.get_xmajorticklabels(), rotation=30) 
ax2.set_ylabel('') 
ax2.set_xlabel(''); 

leg = seaborn_grid.fig.legends[0] 
leg.set_bbox_to_anchor([0, .1, 1.5,1]) 

Welche enter image description here

Beispieldaten für Datenrahmen ergibt:

df_melt = {'education': {0: '1. < HS Grad', 
    1: '4. College Grad', 
    2: '3. Some College', 
    3: '4. College Grad', 
    4: '2. HS Grad'}, 
'value': {0: 18, 1: 24, 2: 45, 3: 43, 4: 50}, 
'variable': {0: 'age', 1: 'age', 2: 'age', 3: 'age', 4: 'age'}, 
'wage': {0: 75.043154017351497, 
    1: 70.476019646944508, 
    2: 130.982177377461, 
    3: 154.68529299562999, 
    4: 75.043154017351497}} 

df_wage={'education': {0: '1. < HS Grad', 
    1: '4. College Grad', 
    2: '3. Some College', 
    3: '4. College Grad', 
    4: '2. HS Grad'}, 
'wage': {0: 75.043154017351497, 
    1: 70.476019646944508, 
    2: 130.982177377461, 
    3: 154.68529299562999, 
    4: 75.043154017351497}} 
+0

Ich glaube, Sie 'PairGrid' verwenden möchten. – mwaskom

Antwort

18

Eine Möglichkeit wäre, statt zu NICHT verwenden lmplot(), sondern direkt verwenden regplot(). regplot() Plots auf den Achsen, die Sie als Argument mit ax= übergeben.

Sie verlieren die Fähigkeit, Ihr Dataset automatisch nach einer bestimmten Variablen zu teilen, aber wenn Sie die Plots, die Sie generieren möchten, vorher wissen, sollte dies kein Problem sein.

Etwas wie folgt aus:

fig, axs = plt.subplots(ncols=3) 
sns.regplot(x='value', y='wage', data=df_melt, ax=axs[0]) 
sns.regplot(x='value', y='wage', data=df_melt, ax=axs[1]) 
sns.boxplot(x='education',y='wage', data=df_melt, ax=axs[2]) 
+0

Danke, ich glaube, ich suchte nach einer allgemeineren Lösung, die es dem Facettengitter ermöglichte, in Zukunft zusätzliche Blankachsen für zusätzliches Plotten einzubauen. Es gibt möglicherweise keine Möglichkeit, dies mit lmplot zu tun. –

+6

Nach einem Jahr der Betrachtung, stimme ich zu, das ist die beste Methode. –

+0

Es hat funktioniert, ich habe eine Frage bezogen, aber noch nicht gelöst. Könnten Sie einen Blick darauf werfen bitte, ich weiß nicht, wie Sie privat Nachricht. Thanks.https: //stackoverflow.com/q/48225888/2525479 – StayFoolish

Verwandte Themen