繁体   English   中英

使用Pandas DataFrame在python中创建堆叠区域图

[英]Creating a stacked area plot in python with a Pandas DataFrame

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本问题所述从熊猫转换为numpy数据类型

其次,根据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)

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

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM