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 条形图不接受数组作为高度参数的主要内容,如果未能解决你的问题,请参考以下文章
条形图不工作(无法解析类.....charts.BarChart)