Matplotlib 条形图不接受数组作为高度参数

Posted

技术标签:

【中文标题】Matplotlib 条形图不接受数组作为高度参数【英文标题】:Matplotlib bar chart doesn't accept array as height argument 【发布时间】:2020-10-03 07:37:24 【问题描述】:

我想使用 pyplot 绘制一个条形图,我想在其中显示一系列值。在 x 轴上,我想要从 pandas 数据透视表请求的 y 值的长度范围(数据透视表显示得很好并且工作正常)。这是我编写的代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

...

pvt = pd.pivot_table(df, columns='movexkod', aggfunc='sum', values='EC_diff')
pvt = pvt.transpose()

ind = pvt.index.to_numpy()
x = np.arange(len(ind))
y = pvt.values

fig, ax = plt.subplots()
plt.bar(x, y)
ax.set_xticklabels(ind)

当我将绘图更改为 plt.plot(x, y) 时,此代码似乎可以正常工作,但是当我尝试绘制条形图时,我收到以下错误消息:TypeError: only size-1 arrays can be converted to Python scalars

【问题讨论】:

【参考方案1】:

您可以将 y 值转换为 list 类型,然后将 x 和 y 参数分别传递给 plt.bar() 命令

x = np.arange(len(ind))
y = list(pvt.values) # <--- Convert to list

fig, ax = plt.subplots()
plt.bar(x, y)

【讨论】:

【参考方案2】:

Sheldore 的回答是朝着正确方向迈出的一步,但是,我认识到问题在于数组是嵌套的:这些值本身不是一个值数组,而是单长度数组,因此我编写了一些基本代码解决了问题,现在剧情显示出来了:

x = np.arange(len(ind))
y = []

[ y.append(value[0]) for value in pvt.values]

fig, ax = plt.subplots()
plt.bar(x, y)
ax.set_xticklabels(ind)

【讨论】:

以上是关于Matplotlib 条形图不接受数组作为高度参数的主要内容,如果未能解决你的问题,请参考以下文章

Python-matplotlib 画直方图hist

Ggplot条形图不显示任何列[关闭]

条形图不工作(无法解析类.....charts.BarChart)

matplotlib 中的 figsize 不会改变图形大小? [复制]

Matplotlib 图不更新数据更改

为啥我的 ggplot2 条形图不显示大于 0 的 ylim 最小值?