matplotlib散点不能使用时间作为x轴?

时间:2018-06-20 02:18:16

标签: python pandas matplotlib time scatter

我需要使用matplotlib,散点图来绘制图形,该图形使用时间作为x asix。一个例子是这样的:

t=pd.DataFrame({'Time':pd.to_datetime(['07:42:34','08:01:20','10:12:32','14:20,37','18:36:27']).time,
                'Num':[3,3,3,3,3]})

当我使用以下代码绘制一条线时:

plt.plot(t.loc[:,'Time'],t.loc[:,'Num'])
plt.show()

这个数字看起来不错:

enter image description here

但是,如果我使用以下代码绘制一个散点图:

plt.scatter(t.loc[:,'Time'],t.loc[:,'Num'])
plt.show()

然后我有以下错误信息:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Python35\lib\site-packages\matplotlib\pyplot.py", line 3378, in      scatter
    edgecolors=edgecolors, data=data, **kwargs)
  File "C:\Python35\lib\site-packages\matplotlib\__init__.py", line 1717, in inner
    return func(ax, *args, **kwargs)
  File "C:\Python35\lib\site-packages\matplotlib\axes\_axes.py", line 4032, in scatter
    alpha=alpha
  File "C:\Python35\lib\site-packages\matplotlib\collections.py", line 878, in __init__
    Collection.__init__(self, **kwargs)
  File "C:\Python35\lib\site-packages\matplotlib\collections.py", line 149, in __init__
    offsets = np.asanyarray(offsets, float)
  File "C:\Python35\lib\site-packages\numpy\core\numeric.py", line 544, in asanyarray
    return array(a, dtype, copy=False, order=order, subok=True)
TypeError: float() argument must be a string or a number, not 'datetime.time'

有人在这里帮助我吗?请解释为什么会发生这种情况,以及如何使用时间作为x轴绘制散点图。我只想要时间,没有日期。

1 个答案:

答案 0 :(得分:1)

DataFrame.plot在绘制线条时可以正确处理日期时间,但是在其他类型的图形(例如barscatterplot

中则往往会出现问题)

一种便宜且简单的解决方法是仅使用kind='line'(默认设置)并将线宽设置为零并指定标记。

t.plot(x='Time', y='Num', lw=0, marker='o', figsize=(8,4)) 

enter image description here