matplotlib scatter 不能使用时间作为 x 轴?
matplotlib scatter cannot use time as x axis?
我需要用到matplotlib, scatter 来画图,用时间作为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()
身材还可以:
但是如果我用下面的代码画散点图:
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 轴绘制散点图很感兴趣。我只想要时间,没有日期。
DataFrame.plot
在绘制线条时可以正确处理日期时间,但在处理其他类型的绘图(例如 bar
和 scatterplot
时往往会出现问题
一个稍微便宜和简单的解决方法是只使用 kind='line'
(默认)并将线宽设置为零并指定一个标记。
t.plot(x='Time', y='Num', lw=0, marker='o', figsize=(8,4))
我需要用到matplotlib, scatter 来画图,用时间作为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()
身材还可以:
但是如果我用下面的代码画散点图:
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 轴绘制散点图很感兴趣。我只想要时间,没有日期。
DataFrame.plot
在绘制线条时可以正确处理日期时间,但在处理其他类型的绘图(例如 bar
和 scatterplot
一个稍微便宜和简单的解决方法是只使用 kind='line'
(默认)并将线宽设置为零并指定一个标记。
t.plot(x='Time', y='Num', lw=0, marker='o', figsize=(8,4))