使用两列数据绘制柱状图时出现TypeError: unhashable type: 'numpy.ndarray'错误求助
解决柱状图绘制时的
TypeError: unhashable type: 'numpy.ndarray'问题 我来帮你拆解下问题根源,以及给出具体的修复方案:
问题出在哪?
你的错误核心有两个:
y变量的类型错误:y = dengue_by_region['Region']并没有提取出实际的区域名称列表,它返回的是一个SeriesGroupBy对象(不是可直接用于绘图的数组/Series)。当matplotlib尝试解析这个对象时,内部会碰到不可哈希的numpy数组类型,从而抛出那个错误。plt.bar的参数逻辑混淆:plt.bar()默认参数顺序是(x, height),也就是X轴放类别、Y轴放对应数值;如果想把区域放在Y轴、病例数放在X轴,应该用横向柱状图plt.barh()。
修复后的完整代码
步骤1:正确聚合数据
先把分组求和的结果转换成一个包含Region和Dengue_Cases列的DataFrame,方便提取绘图字段:
# 分组求和并重置索引,让Region从索引变成普通列 dengue_summary = ph_dengue_cases2016_2020.groupby('Region')['Dengue_Cases'].sum().reset_index()
步骤2:绘制你想要的横向柱状图(区域在Y轴,病例数在X轴)
import matplotlib.pyplot as plt # 横向柱状图:Y轴是区域,X轴是总病例数 plt.barh(dengue_summary['Region'], dengue_summary['Dengue_Cases']) plt.xlabel('Total Dengue Cases') plt.ylabel('Region') plt.title('Total Dengue Cases by Region (2016-2020)') plt.show()
如果想要垂直柱状图(区域在X轴,病例数在Y轴),可以用这段代码:
plt.bar(dengue_summary['Region'], dengue_summary['Dengue_Cases']) plt.xlabel('Region') plt.ylabel('Total Dengue Cases') plt.title('Total Dengue Cases by Region (2016-2020)') # 旋转X轴标签避免名称重叠 plt.xticks(rotation=45, ha='right') plt.show()
补充说明
你之前的dengue_by_region = ph_dengue_cases2016_2020.groupby('Region')只是创建了一个分组规则对象,并没有实际生成计算结果。而通过.reset_index(),我们把分组后的索引(也就是Region)转换成了普通列,这样就能直接提取出可用于绘图的标准化数据了。
内容的提问来源于stack exchange,提问作者Muhammad Ali
相关产品推荐
相关产品推荐

