我在散点图中绘制了汽车的一些测量速度。我想表明在一天中的某些时段经常会出现低速。绘图工作正常,但我对y轴不满意。
import pandas as pd
import matplotlib.pyplot as plt
Time = ['2018-03-16 16:15', '2018-03-16 16:30', '2018-03-16 16:45']
Speed = [56, 46, 51]
df = pd.DataFrame({'Time':pd.to_datetime(Time), 'Speed':Speed})
df.set_index('Time', inplace=True)
plt.scatter(df.index, df.index.time)
plt.xlim('2018-03-04','2018-03-31')
plt.ylim('06:00','20:00')
plt.show()
给予
我希望y轴只包括完整的小时(可能是06:00,12:00,16:00和20:00)
我试过像
这样的东西fig,ax = plt.subplots()
hours =mdates.HourLocator(interval=1)
h_fmt =mdates.DateFormatter('%H')
ax.scatter(df.index, df.index.time)
ax.yaxis.set_major_locator(hours)
ax.yaxis.set_major_formatter(h_fmt)
fig.autofmt_xdate()
plt.show()
这似乎产生了大量的蜱。
有人有解决方案吗?
答案 0 :(得分:1)
这样的东西?
plt.scatter(df.index, df.index.time)
plt.gcf().autofmt_xdate()
yticks = [datetime.time(6,0),datetime.time(10,0),datetime.time(14,0),datetime.time(18,0),datetime.time(22,0)]
ax = plt.gca()
ax.set_yticks(yticks)
plt.show()
答案 1 :(得分:1)
它与matplotlib如何处理datetime.time对象有关。试试这个:
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
Time = ['2018-03-16 16:15', '2018-03-16 16:30', '2018-03-16 16:45']
time = [datetime.strptime(d,'%Y-%m-%d %H:%M') for d in Time]
Speed = [56, 46, 51]
df = pd.DataFrame({'Time':pd.to_datetime(Time), 'Speed':Speed})
df.set_index('Time', inplace=True)
plt.scatter(df.index, time)
plt.xlim('2018-03-04','2018-03-31')
plt.ylim('2018-03-16 06:00','2018-03-16 20:00')
plt.show()
答案 2 :(得分:0)
这不是一个理想的解决方案,但您可以执行类似
的操作df['time'] = df.index.hour + df.index.minute/60 #if Python 2.x Cast minute as a float
df.plot(x = 'time',y = 'Speed', kind = 'scatter')
你必须将分钟解释为一小时的分数(例如16.5真的是下午4:30),但它足以做你想做的事。