如何在单图中绘制多箱线图,支持按分类变量分组
多箱线图与分组箱线图实现方案
一、普通多箱线图(无分类变量)
直接利用seaborn.boxplot传入原始DataFrame,即可生成每一列对应的箱线图:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 绘制普通多箱线图 plt.figure(figsize=(10, 6)) sns.boxplot(data=df) plt.title('普通多箱线图') plt.ylabel('数值') plt.xticks(rotation=45) # 旋转x轴标签避免重叠 plt.tight_layout() # 自动调整布局 plt.show()
二、分组箱线图(有分类变量)
需要先将数据合并并转换为长格式,再结合分类变量实现分组可视化:
步骤1:合并数据并转换格式
# 合并数值DataFrame和分类DataFrame merged_df = pd.concat([df, ad], axis=1) # 转换为长格式,方便seaborn分组绘制 long_df = merged_df.melt(id_vars='Category', var_name='帐篷名称', value_name='数值')
步骤2:绘制分组箱线图
plt.figure(figsize=(12, 6)) sns.boxplot(data=long_df, x='帐篷名称', y='数值', hue='Category') plt.title('按时段分组的箱线图') plt.xticks(rotation=45) plt.tight_layout() plt.show()
说明
- 长格式转换后,
hue参数指定分类变量Category,会在每个帐篷类别下生成对应分组的箱线图; xticks(rotation=45)用于旋转x轴标签,避免因名称过长导致重叠;tight_layout()自动调整图表元素位置,优化显示效果。
内容的提问来源于stack exchange,提问作者Jan Schatz
相关产品推荐
相关产品推荐

