gpt4 book ai didi

python - 使用 Pandas DataFrame 在 python 中创建堆积面积图

转载 作者:行者123 更新时间:2023-12-03 18:37:50 26 4
gpt4 key购买 nike

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt

dates = np.arange(1990,2061, 1)
dates = dates.astype('str').astype('datetime64')

df = pd.DataFrame(np.random.randint(0, dates.size, size=(dates.size,3)), columns=list('ABC'))
df['year'] = dates

cols = df.columns.tolist()
cols = [cols[-1]] + cols[:-1]
df = df[cols]

fig = plt.figure()
ax = fig.add_subplot(1,1,1)

ax.stackplot(df['year'], df.drop('year',axis=1))

基于此代码,我收到错误消息“TypeError:输入类型不支持 ufunc 'isfinite',并且无法根据强制转换规则 ''safe'' 将输入安全地强制转换为任何受支持的类型”

我试图弄清楚如何在第一列中绘制一个带有年份的 DataFrame 对象,然后从后续列(A、B、C)中堆叠区域。

另外,由于我是一个完整的初学者……请随时对我的代码发表评论,以使其更清晰/更好。我知道如果我使用 Matplotlib 而不是 Pandas 集成绘图方法,我有更多的功能可以在以后进行调整吗?

谢谢!

最佳答案

我在运行您的代码时遇到了两个问题。

首先,stackplot 似乎不喜欢使用日期的字符串表示。日期时间数据类型有时非常挑剔。使用整数作为“年份”列,或使用 .values 将 Pandas 转换为 numpy 数据类型,如 this question 中所述

其次,根据 documentation for stackplot ,当你调用 stackplot(x, y) 时,如果 x 是 Nx1 数组,那么 y 必须是 MxN,其中 M 是列数。您的 df.drop('year',axis=1)) 最终会变成 NxM 并向您抛出另一个错误。但是,如果您进行转置,则可以使其工作。

如果我只是用

ax.stackplot(df['year'].values, df.drop('year',axis=1).T)

我得到一个看起来像这样的情节:

enter image description here

关于python - 使用 Pandas DataFrame 在 python 中创建堆积面积图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46737999/

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