我使用这些行创建了一些数据,用您的数据替换它们:
from itertools import product
Time = [f'2017-03-13 {H}:{M}:{S}' for H, M, S in list(product([('0' + str(x))[-2:] for x in range(0, 24)],
[('0' + str(x))[-2:] for x in range(0, 60)],
[('0' + str(x))[-2:] for x in range(0, 60)]))]
Speed = list(130*np.random.rand(len(Time)))
Kilometer = list(50*np.random.rand(len(Time)))
N130317 = pd.DataFrame({'Time':Time, 'Speed':Speed, 'Kilometer':Kilometer})
我使用这一行将N130317['Time'] 转换为时间戳:
N130317['Time'] = pd.to_datetime(N130317['Time'], format = '%Y-%m-%d %H:%M:%S')
然后我将 yaxis 格式属性设置为日期:
import matplotlib.dates as md
ax=plt.gca()
xfmt = md.DateFormatter('%H:%M')
ax.yaxis.set_major_formatter(xfmt)
整个代码是:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as md
from itertools import product
Time = [f'2017-03-13 {H}:{M}:{S}' for H, M, S in list(product([('0' + str(x))[-2:] for x in range(0, 24)],
[('0' + str(x))[-2:] for x in range(0, 60)],
[('0' + str(x))[-2:] for x in range(0, 60)]))]
Speed = list(130*np.random.rand(len(Time)))
Kilometer = list(50*np.random.rand(len(Time)))
N130317 = pd.DataFrame({'Time':Time, 'Speed':Speed, 'Kilometer':Kilometer})
N130317['Time'] = pd.to_datetime(N130317['Time'], format = '%Y-%m-%d %H:%M:%S')
marker_size = 1 # sets size of dots
cm = plt.cm.get_cmap('plasma_r') #sets colour scheme
plt.scatter(N130317['Kilometer'], N130317['Time'], marker_size, c=N130317['Speed'], cmap=cm)
ax=plt.gca()
xfmt = md.DateFormatter('%H:%M')
ax.yaxis.set_major_formatter(xfmt)
plt.title("NDW 13-03-17")
plt.xlabel("Kilometer")
plt.ylabel("Time")
plt.colorbar().set_label("Speed", labelpad=+1) #Makes a legend
plt.show()
它给了我这个情节:
请注意,pd.to_datetime() 必须应用于 datetime 对象,而不是字符串。如果你运行这段代码:
hour = '2017-03-13 00:00:00'
pd.to_datetime(hour, format = '%H:%M')
您将收到以下错误消息:
ValueError: time data '2017-03-13 00:00:00' does not match format '%H:%M' (match)
所以您需要使用此代码,以便将字符串转换为datetime:
hour = '2017-03-13 00:00:00'
hour = datetime.strptime(hour, '%Y-%m-%d %H:%M:%S')
pd.to_datetime(hour, format = '%H:%M')
这取决于您拥有的数据类型,我没有遇到这个问题,因为我按照上面的方法重新创建了数据。
版本信息
Python 3.7.0
matplotlib 3.2.1
numpy 1.18.4
pandas 1.0.4