2017-10-13 211 views
0
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)) 

在此基础上的代码,我得到一个错误“类型错误:ufunc‘ISFINITE’不支持输入类型,并输入无法安全地强制到任何支持的类型根据铸造规则''安全''“Python中有一个堆叠面积图的熊猫数据帧

我想弄清楚如何在第一列绘制一个DataFrame对象,然后从后续列(A, B,C)..

此外,因为我是一个完整的初学者...请随意对我的代码发表评论,以使其更清晰/更好。我明白,如果我使用Matplotlib而不是Pandas集成绘图方法,那么我有更多的功能可以在以后进行调整?

谢谢!

回答

2

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

首先,stackplot似乎不喜欢使用字符串表示的日期。日期时间数据类型有时非常挑剔。无论是使用整数你的“年”专栏,或使用.values作为this question

其次说明从熊猫到numpy的数据类型转换,根据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

+0

哇。良好的阅读,也感谢您对问题的看法! – bpdronkers

+0

@bpdronkers如果这解决了您的问题,请不要忘记[接受它](https://stackoverflow.com/help/someone-answers)。 – ImportanceOfBeingErnest