如何使用pandas为分组数据绘制箱线图,按Field1分组展示Field2分布
问题根因
你的代码卡住无响应,核心是groupby对象调用boxplot的默认逻辑是为每个分组单独生成子图,你的DataFrame除了Field2还包含Datetime字段,每个子图会同时渲染两个字段的箱线,当分组数量较多时会占用大量内存导致程序卡住,且完全不符合你单图展示分组分布的需求。
你不需要将Field1设为索引,也不需要手动生成groupby对象,用更简单的API即可实现需求。
解决方案
方案1:直接使用pandas原生boxplot(无需额外安装依赖)
import matplotlib.pyplot as plt # 直接通过by参数指定分组字段,column参数指定要绘制分布的字段 df.boxplot( column='Field2', by='Field1', rot=45, fontsize=12, figsize=(10,5) ) # 移除pandas自动生成的多余标题 plt.suptitle('') plt.title('Field2按Field1分组的数值分布') plt.xlabel('Field1') plt.ylabel('Field2') # 显式渲染图形 plt.show()
方案2:使用seaborn绘制,样式更美观
import seaborn as sns import matplotlib.pyplot as plt plt.figure(figsize=(10,5)) sns.boxplot( data=df, x='Field1', y='Field2' ) plt.xticks(rotation=45, fontsize=12) plt.xlabel('Field1') plt.ylabel('Field2') plt.title('Field2按Field1分组的数值分布') plt.show()
注意事项
- 非必要不要对groupby对象直接调用boxplot方法,该API仅适用于多子图分组展示场景
- 绘图结束后务必添加
plt.show()显式触发图形渲染,部分环境默认不会自动弹出图形窗口
内容的提问来源于stack exchange,提问作者Fluxy
相关产品推荐
相关产品推荐

