You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python循环绘制数据集各变量箱线图仅显示最后一个的原因

为什么你的循环只显示最后一个箱线图?

这是因为Pandas的boxplot()默认会在**当前活跃的绘图轴(Axes)**上绘制,每次循环调用时都会覆盖之前的绘图内容,最后自然只留下最后一次的结果。下面给你几个解决办法,按需选择:


方法1:每次循环创建新图形

每次绘制前用plt.figure()创建一个新的独立图形窗口,这样每个变量的箱线图都会单独显示:

import matplotlib.pyplot as plt
colNameList = list(df.columns)

for col in colNameList:
    plt.figure()  # 创建新图形
    df.boxplot(column=col)
    plt.title(f"箱线图:{col}")  # 给每个图加标题,方便区分
plt.show()

方法2:在同一个大图里排列子图

如果想把所有箱线图放在同一个画布上,用子图(subplots)来排列,看起来更规整:

import matplotlib.pyplot as plt
cols = df.columns
# 设置每行显示的子图数量
cols_per_row = 2
# 计算需要多少行(向上取整)
rows = (len(cols) + cols_per_row - 1) // cols_per_row

# 创建画布和子图数组
fig, axes = plt.subplots(rows, cols_per_row, figsize=(12, 8))
# 把二维轴数组转成一维,方便循环遍历
axes = axes.flatten()

for idx, col in enumerate(cols):
    # 指定在对应的子图上绘制
    df.boxplot(column=col, ax=axes[idx])
    axes[idx].set_title(f"{col}")

# 如果变量数不是行列数的整数倍,隐藏多余的空图
for idx in range(len(cols), len(axes)):
    axes[idx].axis('off')

# 自动调整子图间距,避免标题重叠
plt.tight_layout()
plt.show()

方法3:一行代码绘制所有箱线图

其实Pandas本身支持直接绘制所有数值列的箱线图,根本不用写循环:

import matplotlib.pyplot as plt
df.boxplot()
plt.show()

内容的提问来源于stack exchange,提问作者Davide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:18:42