如何在Pandas中绘制将列与type组合为X轴的定制化柱状图?
当然可以实现这种样式的柱状图!
这种需求本质是把数据从宽格式转换为长格式,再通过自定义标签和分组来实现你想要的X轴与图例效果。我用Python的pandas和seaborn(也可以用matplotlib)给你写个完整的实现示例:
步骤1:构造并处理数据
首先还原你的DataFrame(注意我去掉了type列的多余引号,实际使用时根据你的原始数据调整即可):
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 构造你的目标DataFrame df = pd.DataFrame({ 'A': [1, 2, 3], 'B': [2, 3, 4], 'C': [3, 4, 5], 'type': ['house', 'dog', 'mom'] })
步骤2:重塑数据格式
用pd.melt()把宽格式转成长格式,让每个A/B/C和type的组合都成为单独的行,同时生成你需要的自定义X轴标签:
# 重塑数据,保留type作为分组标识,把A/B/C列转成变量列 melted_df = df.melt(id_vars='type', var_name='column', value_name='value') # 生成自定义X轴标签:格式为 列名(type) melted_df['x_label'] = melted_df.apply(lambda row: f"{row['column']}({row['type']})", axis=1)
步骤3:绘制目标柱状图
用seaborn.barplot,通过hue参数指定type作为图例分类,X轴直接使用我们生成的自定义标签:
plt.figure(figsize=(12, 6)) # 绘制柱状图,hue参数让type成为图例区分项 sns.barplot(data=melted_df, x='x_label', y='value', hue='type') # 调整X轴刻度角度,避免文字重叠 plt.xticks(rotation=45, ha='right') # 设置图表标题与轴标签 plt.title('Custom Grouped Bar Chart') plt.xlabel('Column & Type') plt.ylabel('Value') # 调整图例位置与标题 plt.legend(title='Type') plt.tight_layout() plt.show()
效果说明
- X轴会严格按照你想要的顺序显示:
A(house)、A(dog)、A(mom)、B(house)、B(dog)、B(mom)、C(house)、C(dog)、C(mom) - 图例自动对应
house、dog、mom三种类型,不同类型的柱子会用不同颜色区分 - 如果想用纯
matplotlib实现,逻辑类似:先按分组整理数据,然后循环绘制每组柱子,手动设置标签和图例即可。
内容的提问来源于stack exchange,提问作者sungjun cho
相关产品推荐
相关产品推荐

