如何通过循环遍历Pandas DataFrame,使用Seaborn批量绘制箱线图
批量绘制DataFrame所有列的Seaborn箱线图
太懂这种重复写代码的痛苦了!手动给每一列写箱线图代码不仅低效,还容易漏列或者打错列名。用循环遍历DataFrame的列就能完美解决这个问题,我给你两种实用的方案:
方案1:逐列单独生成箱线图
这个方案会为每一列单独创建一个绘图窗口,适合需要单独查看每列细节的场景:
import seaborn as sns import matplotlib.pyplot as plt # 假设你的数据集存储在box_df_1中 for column in box_df_1.columns: # 每次循环创建新的绘图画布 plt.figure(figsize=(6, 4)) # 绘制当前列的箱线图 sns.boxplot(y=column, data=box_df_1) # 添加标题,明确当前图对应的列 plt.title(f'Boxplot for {column}', fontsize=12) # 显示图像 plt.show()
方案2:将所有箱线图排列在同一张画布上
这个方案会把所有列的箱线图排列成网格状,非常适合对比查看多列的异常值分布:
import seaborn as sns import matplotlib.pyplot as plt # 获取DataFrame的列数 total_columns = box_df_1.shape[1] # 设置子图的列数(这里选3列,你可以根据需求调整) cols_per_row = 3 # 计算需要的行数 rows = (total_columns + cols_per_row - 1) // cols_per_row # 创建画布和子图网格 fig, axes = plt.subplots(rows, cols_per_row, figsize=(15, rows*4)) # 将二维的子图数组转为一维,方便循环遍历 axes = axes.flatten() # 遍历每一列,绘制箱线图 for idx, column in enumerate(box_df_1.columns): sns.boxplot(y=column, data=box_df_1, ax=axes[idx]) axes[idx].set_title(f'{column}', fontsize=10) axes[idx].set_ylabel('Value') # 如果列数不能被cols_per_row整除,隐藏多余的空图 for empty_ax in axes[idx+1:]: empty_ax.axis('off') # 自动调整子图间距,避免标题和标签重叠 plt.tight_layout() plt.show()
代码说明
- 两种方案都通过
box_df_1.columns获取所有列名,实现了完全自动化的批量绘图,不管你的DataFrame有多少列,代码都能适配。 - 方案2中的
cols_per_row可以根据你的需求调整,比如列数多的话可以设为4,让布局更紧凑。
内容的提问来源于stack exchange,提问作者Huzaifa Arshad
相关产品推荐
相关产品推荐

