2016-11-17 3 views
2

У меня возникают проблемы, делая это очень простой пример работы:Matplotlib бар участок с пандами Timestamp

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. (Примечание: Я не могу использовать методы DataFrame ПРОКЛАДКИ, потому что мой реальный пример находится внутри Сиборн FacetGrid, и я должен использовать Matplotlib непосредственно.)

ответ

3

Использование:

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

при использовании объектов серии. Проблема в том, что вы не отправляете объект, похожий на массив, это индексированный массив, который 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» напрямую. –