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
相关产品推荐
相关产品推荐

