gpt4 book ai didi

python - 如何在 matplotlib 中按列而不是行迭代子图

转载 作者:行者123 更新时间:2023-12-05 02:31:28 26 4
gpt4 key购买 nike

假设我有一个包含 30 列的数据框,前 10 列是各种收集数据的“平均值”,接下来的 10 列是“中位数”,最后 10 列是“众数”。例如,第 1 列是 height_mean,第 10 列是 height_median,第 20 列是 height_mode。第 2 列是 weight_mean,然后第 11 列是 weight_median,第 21 列是weight_median

<表类="s-表"><头>平均高度...高度中位数...高度模式...<正文>56...58...55...

我想创建一个 10x3 的子图,它为每个变量绘制均值、中值和众数图,并将它们相邻绘制,这样子图的每一行都是一个新变量。因此,子图的第一行将包含高度的均值、中值和众数图,子图的第二行将包含体重的均值、中值和众数图,依此类推。

到目前为止,我有这个,它按照列在数据框中的顺序创建子图:

fig, axs = plt.subplots(10, 3, figsize=(20,20))

for count, ax in zip(df.columns, axs.ravel()):
df_data.loc[:,[count]].boxplot(ax=ax)
plt.show()

我尝试过这样的操作,但没有成功:

for n, column in enumerate(df_columns):
# add a new subplot iteratively
ax = plt.subplot(10, 3, n + 1)
df_data.iloc[:,[n]].boxplot(ax=ax)
ax = plt.subplot(10, 3, n + 2)
df_data.iloc[:,[n+9]].boxplot(ax=ax)
ax=plt.subplot(10,3,n+3)
df_data.iloc[:,[n+19]].boxplot(ax=ax)

最佳答案

要按列迭代子图,最简单的方法是在拼凑之前转置 axs,即 axs.T.ravel():

for col, ax in zip(df.columns, axs.T.ravel()):

这是一个最小的演示。请注意 weight_mean 现在如何低于 height_mean 而不是向右:

headers = ['height_mean', 'weight_mean', 'height_median', 'weight_median', 'height_mode', 'weight_mode']
df = pd.DataFrame(np.random.random((3, 6)), columns=headers)
# height_mean weight_mean height_median weight_median height_mode weight_mode
# 0 0.982351 0.548713 0.559040 0.497497 0.842977 0.738946
# 1 0.832716 0.660227 0.754149 0.286536 0.315156 0.312089
# 2 0.997460 0.290112 0.501917 0.974751 0.097419 0.559542

ncols = 3
nrows = len(df.columns) // ncols

fig, axs = plt.subplots(nrows, ncols, constrained_layout=True)
for col, ax in zip(df.columns, axs.T.ravel()):
df[[col]].boxplot(ax=ax)

关于python - 如何在 matplotlib 中按列而不是行迭代子图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71521800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com