2016-11-17 58 views
2

我無法使這個非常簡單的例子的工作:Matplotlib條形圖與大熊貓時間戳

from numpy import datetime64 
from pandas import Series 
import matplotlib.pyplot as plt 
import datetime 

x = Series ([datetime64("2016-01-01"),datetime64("2016-02-01")]).astype(datetime) 
y = Series ([0.1 , 0.2]) 

ax = plt.subplot(111) 
ax.bar(x, y, width=10) 
ax.xaxis_date() 

plt.show() 

我得到的錯誤是:

TypeError: float() argument must be a string or a number, not 'Timestamp' 

astype(datetime)片 - 這是我試過在reading this other SO post之後。沒有那一塊,我會得到同樣的錯誤。

在另一方面,比如作品不夠用普通datetime64類型 - 也就是,改變這些兩行:

x = [datetime64("2016-01-01"),datetime64("2016-02-01")] 
y = [0.1 , 0.2] 

所以這個問題必須Timestamp型,大熊貓的datetime64對象轉換成。有沒有辦法使這個工作直接與Timestamp,而不是恢復到datetime64?我在這裏使用Series/Timestamp,因爲我的真正目標是繪製DataFrame系列。 (注:因爲我真實的例子是seaborn FacetGrid內,我必須直接使用matplotlib我不能使用DataFrame繪製方法。)

回答

3

用途:

ax.bar(x.values, y, width=10) 

使用Series對象時。問題是你沒有發送一個類似於數組的對象,它是一個matplotlib不知道如何處理的索引數組。 values僅返回陣列

1

由於您的目標是繪製DataFrame系列,因此您可以使用pd.DataFrame.plot

from numpy import datetime64 
from pandas import Series 
import matplotlib.pyplot as plt 
import datetime 
%matplotlib inline 

x = Series ([datetime64("2016-01-01"),datetime64("2016-02-01")]) 
y = Series ([0.1 , 0.2]) 

df = pd.DataFrame({'x': x, 'y': y}) 
df.plot.bar(x='x', y='y') 

image produced

+0

我的心願!不幸的是,在我真正的問題中,我正在使用一個「FacetGrid」,需要直接使用'matplotlib'。 –