Python:使用for循环创建matplotlib子图



我想知道如何使我的代码更有效与for循环。我对制作多个子情节很感兴趣。在这个例子中,我使用了4个,但实际上我有14个。

到目前为止,我一直在复制/粘贴相同的代码块
df_A = df.loc[df['category'] == 'A'].copy()
df_B = df.loc[df['category'] == 'B'].copy()
df_C = df.loc[df['category'] == 'C'].copy()
df_D = df.loc[df['category'] == 'D'].copy()
dataframes = [df_A, df_B, df_C, df_D]
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(12, 12), dpi=100)
fig.suptitle('Distributions per category in minutes', fontweight="bold", fontsize=15)
# category A
ax1.hist(df_A['time_spent'], color="darkcyan", edgecolor='black', bins=20)
ax1.set_title('Category A', fontsize=10)
# category B
ax2.hist(df_B['time_spent'], color="darkcyan", edgecolor='black', bins=20)
ax2.set_title('Category B', fontsize=10)
# category C
ax3.hist(df_C['time_spent'], color="darkcyan", edgecolor='black', bins=20)
ax3.set_title('Category C', fontsize=10)
# category D
ax4.hist(df_D['time_spent'], color="darkcyan", edgecolor='black', bins=20)
ax4.set_title('Category D', fontsize=10)
fig.tight_layout()
plt.show()

您可以将轴和条件存储在列表中,并对它们进行迭代以创建您的图。这样做就可以了:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from itertools import chain
df = pd.DataFrame(
{
"category": ["A", "B", "C", "D"] * 1000,
"time_spent": np.random.rand(4000)
}
)
# categories = ["A", "B", "C", "D"]
categories = sorted(list(df["category"].unique()))
fig, axes = plt.subplots(2, 2, figsize=(12, 12), dpi=100)
axes = list(chain.from_iterable(axes))
fig.suptitle('Distributions per category in minutes', fontweight="bold", fontsize=15)
for i in range(len(axes)):
axes[i].hist(df.loc[df['category'] == categories[i], 'time_spent'], color="darkcyan", edgecolor='black', bins=20)
axes[i].set_title(f'Category {categories[i]}', fontsize=10)

fig.tight_layout()
plt.show()

最新更新