Matplotlib条形图错误-TypeError:只能将size-1数组转换为Python标量

伊姆·温杜斯

假设我有以下DataFrame:

import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime as dt

df = pd.DataFrame(
    [
        ['2008-02-19', 10],
        ['2008-03-01', 15],
        ['2009-02-05', 20],
        ['2009-05-10', 40],
        ['2010-10-10', 25],
        ['2010-11-15', 5]
    ],
    columns = ['Date', 'DollarTotal']
)
df

df

我想绘制按年总计的总数,因此执行以下转换:

df['Date'] = pd.to_datetime(df['Date'])
df_Year = df.groupby(df['Date'].dt.year)
df_Year = df_Year.sum('DollarTotal')
df_Year

df_Year

matplotlib中的以下代码创建以下图表:

fig,ax = plt.subplots()
ax.plot(df_Year.index, df_Year.values)
ax.set_xlabel("OrderYear")
ax.set_ylabel("$ Total")
ax.set_title("Annual Purchase Amount")
plt.xticks([x for x in df_Year.index], rotation=0)
plt.show()

阴谋

问题时,我想创建一个发生条形图使用相同的数据帧。通过将上面的代码从更改ax.plotax.bar,我得到以下错误:

错误

在matplotlib中进行绘图之前,我从未遇到过此错误。我做错了什么?

请参阅下面由dm2解决的问题的答案。


编辑:

我只是想出了为什么我以前从未遇到过这个问题。这与我如何总结groupby如果我替换为df_Year = df_Year.sum('DollarTotal')df_Year = df_Year['DollarTotal'].sum()则不会发生此问题。

df = pd.DataFrame(
    [
        ['2008-02-19', 10],
        ['2008-03-01', 15],
        ['2009-02-05', 20],
        ['2009-05-10', 40],
        ['2010-10-10', 25],
        ['2010-11-15', 5]
    ],
    columns = ['Date', 'DollarTotal']
)
df['Date'] = pd.to_datetime(df['Date'])
df_Year = df.groupby(df['Date'].dt.year)
df_Year = df_Year['DollarTotal'].sum()
df_Year

df_sum

fig,ax = plt.subplots()
ax.bar(df_Year.index, df_Year.values)
ax.set_xlabel("OrderYear")
ax.set_ylabel("$ Total")
ax.set_title("Annual Purchase Amount")
plt.xticks([x for x in df_Year.index], rotation=0)
plt.show()

在此处输入图片说明

dm2

matplotlib.axes.Axes.bar文档中,该函数期望height参数为标量或标量序列。pandas.DataFrame.values是一个二维数组,它的第一维是行,第二维是列(即使只有一列,它也是一个二维数组),所以它是一个数组序列。因此,如果使用df.values,则还需要将其调整为标量(即df.values.reshape(len(df))的预期序列(即一维数组)。

或者,特别是在您的代码中:ax.bar(df_Year.index, df_Year.values.reshape(len(df_Year))

结果:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python:类型错误:只能将长度为 1 的数组转换为 Python 标量

Python 错误:只能将大小为 1 的数组转换为 Python 标量

只能将size-1数组转换为Python标量

类型错误:只能将长度为1的数组转换为Python标量

Python上的LMFIT:TypeError:只能将size-1数组转换为Python标量

发生异常:TypeError:只能将size-1数组转换为Python标量

绘制Wavefunction:TypeError:只能将Size-1数组转换为Python标量

创建条形图但获得 TypeError 只有大小为 1 的数组可以转换为 Python 标量

Python numpy 错误:只能将整数标量数组转换为标量索引

只能将size-1数组转换为Python标量python

TypeError:只能将整数标量数组转换为标量索引

我该如何解决?只能将size-1数组转换为Python标量

这是什么意思-TypeError:只能将length-1数组转换为Python标量?

array = np.int(array)TypeError:只能将长度为1的数组转换为Python标量

TypeError:只有大小为1的数组可以转换为Python标量,此错误

Python TypeError:只能将整数标量数组转换为标量索引

TypeError:在转换数据帧“ to_datetime”时,只能将整数标量数组转换为标量索引

熊猫-只能将大小为1的数组转换为Python标量

Pandas ValueError:只能将大小为 1 的数组转换为 Python 标量

Pandas 只能将大小为 1 的数组转换为 Python 标量

ValueError:只能将大小为1的数组转换为Numpy Select的Python标量

函数集成返回“只能将长度为1的数组转换为Python标量”

使用Matlab键时,只能将length-1数组转换为Python标量

一维numpy串联:TypeError:只能将整数标量数组转换为标量索引

TypeError:在KFold中,只能将整数标量数组转换为标量索引

Scipy peak_widths返回TypeError:只能将整数标量数组转换为标量索引

TypeError:尝试kfold cv时,只能将整数标量数组转换为标量索引

TypeError:在计算RMSE时,只能将整数标量数组转换为标量索引

只能将整数标量数组转换为标量索引