尝试绘制堆积条形图时收到形状不匹配错误消息

Posted

技术标签:

【中文标题】尝试绘制堆积条形图时收到形状不匹配错误消息【英文标题】:Getting a shape mismatch error message when trying to plot a stacked barchart 【发布时间】:2019-06-08 12:36:52 【问题描述】:

我正在尝试从我的数据创建堆积条形图并不断收到错误消息

ValueError:形状不匹配:对象不能广播到单个 形状

这是我写的相关代码:

num = list(yearly_posts.index)
barWidth = 0.50
plt.bar(num,yearly_status.values, color='#b5ffb9',edgecolor='white',width=barWidth)
plt.bar(num,yearly_posts.values, color='#f9bc86',edgecolor='white',width=barWidth)

这是我的数据样本

#yearly_status table
year
2009     85
2010     86
2011    188
2012    274
2013    240
2014    171
2015    132
2016     22
2017     18
2018     13
dtype: int64

#yearly_posts table
year
2009     8
2010    19
2013    19
2014    40
2015    13
2016    20
2017    27
2018    17
dtype: int64

【问题讨论】:

yearly_status.valuesyearly_posts.values 的大小不同,但您只使用一个num(大小为yearly_posts)。您可能应该将第一次 plt.bar 调用中的 num 更改为 list(yearly_status.index) @Bart 啊哈,明白了,谢谢 【参考方案1】:

问题是您的两个数据框的编号不相等。这就是为什么num 对两者都不同的原因。解决方案是为num1num2 使用不同的索引。此外,您必须将您的值二维数组展平为一维数组yearly_status.values.flatten()

num1 = list(yearly_status.index)
num2 = list(yearly_posts.index)
barWidth = 0.50
plt.bar(num1, yearly_status.values.flatten(), color='#b5ffb9',edgecolor='white',width=barWidth)
plt.bar(num2, yearly_posts.values.flatten(), color='#f9bc86',edgecolor='white',width=barWidth)

【讨论】:

【参考方案2】:

如果您确定两个列表对象的长度相等并且仍然收到shape mismatch 错误。您可以在绘图之前将列表对象转换为 numpy 数组。

import numpy as np
numpyObject = np.array(listObject)

【讨论】:

以上是关于尝试绘制堆积条形图时收到形状不匹配错误消息的主要内容,如果未能解决你的问题,请参考以下文章

在绘制条形图时尝试更改数字格式

绘制水平堆积条形图不适用于日期中的 x 轴

绘制堆积条形图

Pandas - 绘制堆积条形图

matlab绘制条形图时,怎样设置横坐标,绘制出横坐标为距离范围,纵坐标为统计数量的条形图

ggplot2:3路交互堆积条形图的分组条形图