2017-07-20 2 views
2

Ich schreibe Code in einem Jupyter-Notizbuch und habe ein Seaborn-Facettengitter, das ich 4 Spalten und 3 Reihen haben möchte. Jedes Grundstück ist für ein anderes Land aus einer Liste von 10 Ländern. Da es insgesamt 12 Gitter gibt und die letzten beiden leer sind, gibt es eine Möglichkeit, die letzten beiden Gitter loszuwerden? Die Lösung, die Maße 5 x 2 zu machen, ist keine Option, da es zu schwer zu sehen ist, wenn so viele Plots zusammengeknüllt werden.Ist es möglich, leere Gitter in Seaborn Facetgrid zu kürzen?

Code:

ucb_w_reindex_age = ucb_w_reindex[np.isfinite(ucb_w_reindex['age'])] 
ucb_w_reindex_age = ucb_w_reindex_age.loc[ucb_w_reindex_age['age'] < 120] 

def ageSeries(country): 
    return ucb_w_reindex_age.loc[ucb_w_reindex_age['country_destination'] == country].age.fillna(value=30).resample('5d').rolling(window=3, min_periods=1).mean() 

def avgAge(country): 
    return ucb_w_reindex_age.loc[ucb_w_reindex_age['country_destination'] == country].age.mean() 

num_plots = 10 
fig, axes = plt.subplots(3, 4,figsize=(20, 15)) 
labels = ["01/10", "09/10", "05/11", "02/12", "10/12", "06/13", "02/14"] 

list_of_dfs = [{'country': item, 'age': ageSeries(item), 'avgAge': avgAge(item)} for item in ['US', 'FR', 'AU', 'PT', 'CA', 'DE', 'ES', 'GB', 'IT', 'NL']] 

colors = ['blue', 'green', 'red', 'orange', 'purple', 'blue', 'green', 'red', 'orange', 'purple'] 
col, row, loop = (0, 0, 0) 
for obj in list_of_dfs: 
    row = math.floor(loop/4) 

    sns.tsplot(data=obj['age'], color=colors[loop], ax=axes[row, col]) 
    axes[row, col].set_title('{}'.format(full_country_names[obj['country']])) 
    axes[row, col].axhline(obj['avgAge'], color='black', linestyle='dashed', linewidth=4) 
    axes[row, col].set(ylim=(20, 65)) 
    axes[row, col].set_xticklabels(labels, rotation=0) 
    axes[row, col].set_xlim(0, 335) 

    if col == 0: 
     axes[row, col].set(ylabel='Average Age') 

    col += 1 
    loop += 1 

    if col == 4: 
     col = 0 

fig.suptitle('Age Over Time', fontsize=30) 
plt.show() 

Facet Grid * Ich weiß, die Bilder scheinen hier in S. O. Tabu zu sein, aber Theres wirklich keine Möglichkeit, dies in Code zu setzen.

enter image description here

Antwort

3

Ich nehme an, Sie Ihre Nebenhandlungen mit

fig, axes = plt.subplots(3, 4,figsize=(20, 15)) 

nicht seaborn.FacetGrid erzeugen, wie in Ihrem Beispiel Codes angezeigt. Was Sie zuerst brauchen, ist irgendwie herauszufinden, welche Plots Sie loswerden wollen und was ihr korrekter Index in axes ist. Dann können Sie matplotlib.figure.Figure.delaxes() verwenden, um Unterplots zu entfernen, die Sie nicht möchten. Hier ein Beispiel:

import matplotlib.pyplot as plt 

fig, axes = plt.subplots(3, 4,figsize=(20, 15)) 
fig.delaxes(axes[2, 2]) 
fig.delaxes(axes[2, 3]) 
plt.show() 

enter image description here

löschen Nebenhandlungen von seaborn.FacetGrid etwas ähnlich ist. Das einzige kleine Detail ist, dass Sie axes von g.axes zugreifen würde:

import matplotlib.pyplot as plt 
import seaborn as sns 

tips = sns.load_dataset("tips") 
g = sns.FacetGrid(tips, col="time", row="smoker", sharex=False, sharey=False) 
g.fig.delaxes(g.axes[1, 1]) 
plt.show() 

enter image description here

+0

Ah, sorry Ich glaube, ich Nebenhandlungen benutze und keine Facette Gitter. Ihre Lösung hat funktioniert! Danke Y. Lou – JBT

+0

@TimothyJosephBaney Added codes für 'seaborn.FacetGrid' nur für den Fall. Bitte überprüfen Sie, wenn nötig. –

Verwandte Themen