2017-10-13 122 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