繁体   English   中英

Matplotlib条形图与熊猫时间戳

[英]Matplotlib bar plot with pandas 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)片-这是我在阅读其他SO post之后尝试过的方法 没有那一块,我会得到同样的错误。

另一方面,该示例对于普通的datetime64类型也可以很好地工作-即更改以下两行:

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

因此,问题必须是熊猫将datetime64对象转换为的Timestamp类型。 有没有一种方法可以使它直接与Timestamp使用,而不是恢复为datetime64 我在这里使用Series / Timestamp ,因为我的真正目的是从DataFrame绘制序列。 (注意:我不能使用DataFrame绘图方法,因为我的真实示例在一个深不可测的FacetGrid并且我必须直接使用matplotlib。)

采用:

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

使用Series对象时。 问题是您没有发送类似于数组的对象,它是matplotlib不知道如何处理的索引数组。 values仅返回数组

由于您的目标是绘制来自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')

产生的图像

暂无
暂无

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

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