鱼C论坛

 找回密码
 立即注册
查看: 2017|回复: 2

[已解决]matplotlib中堆叠柱状图报错

[复制链接]
发表于 2020-7-13 17:17:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
报错:ValueError: shape mismatch: objects cannot be broadcast to a single shape
去掉最后一幅图:plt.bar(x = data_1.keys(),height=data_list[2],color='yellow',label='第三产业',tick_label=['第一季度','第二季度','第三季度'],bottom = data_list[0] + data_list[1])
倒是可以正常显示,堆叠3个就出错了,我哪里写错了求指出

  1. import numpy
  2. import os,pandas#用于导入数据
  3. import matplotlib.pyplot as plt


  4. plt.rcParams['font.sans-serif'] = ['SimHei']
  5. plt.rcParams['axes.unicode_minus'] = False

  6. #堆叠柱状图

  7. data_1 = {'第一产业':[8650,13333,19246],'第二产业':[10000,10120,10600],'第三产业':[70000,80000,88000]}#列表[]中每个元素代表1个季度,共3季度
  8. print(list(data_1.values()))
  9. data_list = list(data_1.values())


  10. plt.bar(x = data_1.keys(),height=data_list[0],color='blue',label='第一产业',tick_label=['第一季度','第二季度','第三季度'])

  11. plt.bar(x = data_1.keys(),height=data_list[1],color='red',label='第二产业',tick_label=['第一季度','第二季度','第三季度'],bottom = data_list[0])
  12. #bottom,画在第一幅图上面
  13. plt.bar(x = data_1.keys(),height=data_list[2],color='yellow',label='第三产业',tick_label=['第一季度','第二季度','第三季度'],bottom = data_list[0] + data_list[1])
  14. #bottom,画在第一,第二幅图上面
  15. plt.title('2017年季度产值')
  16. plt.ylabel('产值(亿)',fontsize=12)
  17. plt.show()
复制代码
最佳答案
2020-7-13 17:21:27


这样的?错误在 bottom 参数那 ,你是传入了列表 而不是值

  1. import numpy
  2. import os,pandas#用于导入数据
  3. import matplotlib.pyplot as plt


  4. plt.rcParams['font.sans-serif'] = ['SimHei']
  5. plt.rcParams['axes.unicode_minus'] = False

  6. #堆叠柱状图

  7. data_1 = {'第一产业':[8650,13333,19246],'第二产业':[10000,10120,10600],'第三产业':[70000,80000,88000]}#列表[]中每个元素代表1个季度,共3季度

  8. data_list = list(data_1.values())


  9. plt.bar(x = data_1.keys(),height=data_list[0],color='blue',label='第一产业',tick_label=['第一季度','第二季度','第三季度'])

  10. plt.bar(x = data_1.keys(),height=data_list[1],color='red',label='第二产业',tick_label=['第一季度','第二季度','第三季度'],bottom = data_list[1][0])
  11. #bottom,画在第一幅图上面
  12. plt.bar(x = data_1.keys(),height=data_list[2],color='yellow',label='第三产业',tick_label=['第一季度','第二季度','第三季度'],bottom = data_list[2][0] + data_list[2][1])
  13. #bottom,画在第一,第二幅图上面
  14. plt.title('2017年季度产值')
  15. plt.ylabel('产值(亿)',fontsize=12)
  16. plt.show()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-13 17:21:27 | 显示全部楼层    本楼为最佳答案   


这样的?错误在 bottom 参数那 ,你是传入了列表 而不是值

  1. import numpy
  2. import os,pandas#用于导入数据
  3. import matplotlib.pyplot as plt


  4. plt.rcParams['font.sans-serif'] = ['SimHei']
  5. plt.rcParams['axes.unicode_minus'] = False

  6. #堆叠柱状图

  7. data_1 = {'第一产业':[8650,13333,19246],'第二产业':[10000,10120,10600],'第三产业':[70000,80000,88000]}#列表[]中每个元素代表1个季度,共3季度

  8. data_list = list(data_1.values())


  9. plt.bar(x = data_1.keys(),height=data_list[0],color='blue',label='第一产业',tick_label=['第一季度','第二季度','第三季度'])

  10. plt.bar(x = data_1.keys(),height=data_list[1],color='red',label='第二产业',tick_label=['第一季度','第二季度','第三季度'],bottom = data_list[1][0])
  11. #bottom,画在第一幅图上面
  12. plt.bar(x = data_1.keys(),height=data_list[2],color='yellow',label='第三产业',tick_label=['第一季度','第二季度','第三季度'],bottom = data_list[2][0] + data_list[2][1])
  13. #bottom,画在第一,第二幅图上面
  14. plt.title('2017年季度产值')
  15. plt.ylabel('产值(亿)',fontsize=12)
  16. plt.show()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-13 17:40:28 | 显示全部楼层
Twilight6 发表于 2020-7-13 17:21
这样的?错误在 bottom 参数那 ,你是传入了列表 而不是值

不是这样,图有点奇怪,不过我明白了,谢谢你
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 13:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表