如何用Seaborn或Matplotlib为表格两列绘制并列柱状图
解决方法
问题根源
你的代码有两个关键错误:
y = 'Quantities,Revenues'不符合seaborn的参数规则,catplot的y参数只能接收单个列名,无法直接传入多个列。- 你指定了
hue='Details',但你的数据表中并没有这一列,参数错误会导致整体解析异常,进而引发类似无法识别Country的报错。
修复步骤
要实现每个国家数量与收入的并列柱状图,需要先把宽格式数据转成长格式,再用catplot绘图:
- 转换数据格式
用pandas的melt函数,将Quantities和Revenues两列合并为指标列和数值列:
import seaborn as sns import pandas as pd import matplotlib.pyplot as plt # 转换宽表为长表 dj_melted = dj.melt( id_vars='Country', # 保留的分组列 value_vars=['Quantities', 'Revenues'], # 需要转换的列 var_name='Metric', # 新的指标列名(区分数量/收入) value_name='Value' # 新的数值列名 )
- 绘制并列柱状图
用转换后的数据绘图,通过hue区分不同指标:
sns.catplot(kind='bar', data=dj_melted, x='Country', y='Value', hue='Metric') plt.show()
额外检查
如果还是提示无法识别Country,请确认:
- 数据框
dj中确实存在名为Country的列,检查列名是否有拼写错误、空格或大小写差异。 - 可以执行
print(dj.columns)查看所有列名,确保和代码中的'Country'完全一致。
内容的提问来源于stack exchange,提问作者user20030574
相关产品推荐
相关产品推荐

