gpt4 book ai didi

python - Matplotlib 条形图错误 - TypeError : only size-1 arrays can be converted to Python scalars

转载 作者:行者123 更新时间:2023-12-05 08:48:21 32 4
gpt4 key购买 nike

假设我有以下 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()

plot

当我想使用相同的 DataFrame 创建一个条形图 时,就会出现问题。通过将上面的代码从 ax.plot 更改为 ax.bar,我得到以下错误:

error

我以前在 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()

enter image description here

最佳答案

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

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

结果:

enter image description here

关于python - Matplotlib 条形图错误 - TypeError : only size-1 arrays can be converted to Python scalars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66154591/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com