Можно ли усечь пустые сетки в Seaborn Facetgrid?
Я пишу код в блокноте Jupyter, и у меня есть Seaborn facetgrid, который я хочу иметь 4 столбца и 3 строки. Каждый участок предназначен для другой страны из списка 10 стран. Поскольку существует 12 полных сеток, и последние две пусты, есть ли способ просто избавиться от этих последних двух сеток ? Решение о создании размеров 5 х 2 не является вариантом, так как это слишком трудно увидеть, когда так много участков скручены вместе.
Код:
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()
Сетка граней *я знаю наличие изображений кажется табу здесь, в S. O., Но на самом деле нет способа поместить это в код.
1 ответ:
Я предполагаю, что вы генерируете свои подзаголовки с помощью
fig, axes = plt.subplots(3, 4,figsize=(20, 15))
Не
seaborn.FacetGrid
, как показано в примерах кодов. Что вам нужно сначала, так это каким-то образом выяснить, от каких участков вы хотите избавиться и каков их правильный индекс вaxes
. Тогда вы можете использоватьmatplotlib.figure.Figure.delaxes()
удалять подзаголовки вы не хотите. Вот пример: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()
Удаление подзаголовков из
seaborn.FacetGrid
несколько похоже. Единственная незначительная деталь заключается в том, что вы получите доступ кaxes
поg.axes
: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()