这是我的数据示例:
df = {
'veh_ID': [102, 102],
'Trip_ID': [1, 2],
'Trip_Start': ['08:00', '11:00'],
'Trip_end': ['10:00', '11:10'],
'Travel distance': [12, 1]
}
我正在尝试绘制累积距离与时间的关系,以在一条线上显示该车辆 ID、行程开始和结束以及停止时间之间的情况,并用平线显示距离没有斜率。
这就是我尝试过的:
df.sort_values(by='Trip_Start', inplace=True)
df['Cumulative Distance'] = df['Travel distance'].cumsum()
plt.plot(df['Trip_Start'], df['Cumulative Distance'], marker='o', label='Start', color='blue')
plt.plot(df['Trip_End'], df['Cumulative Distance'].shift(-1), marker='o', label='End', color='red')
plt.plot(df[['Trip_End', 'Trip_Start']].values.T.flatten(), df['Cumulative Distance'].shift(-1).repeat(2), color='green', linestyle='--')
plt.xlabel('Time')
plt.ylabel('Cumulative Distance (km)')
plt.title('Journey Plot')
plt.legend()
plt.show()
我并没有真正使用 pandas,但我编写了这段代码来实现你想要的。如果它不符合您的需求,我希望它可以帮助您理解您想要的逻辑。
import matplotlib.pyplot as plt
import numpy as np
df = {
'veh_ID': [102, 102],
'Trip_ID': [1, 2],
'Trip_Start': ['08:00', '11:00'],
'Trip_end': ['10:00', '11:10'],
'Travel distance': [12, 1]
}
def plot_trip(df):
# Get numeric time values from Trip_Start and Trip_end
start = [int(x.split(':')[0]) + int(x.split(':')[1]) / 60 for x in df['Trip_Start']]
end = [int(x.split(':')[0]) + int(x.split(':')[1]) / 60 for x in df['Trip_end']]
# Create timeline:
time = []
if len(start) == len(end):
for i in range(len(start)):
time.append(start[i])
time.append(end[i])
# Define distances:
distance = []
index = 0
if len(start) == len(df['Travel distance']):
for i in range(len(time)):
if i == 0:
distance.append(0)
elif i % 2 == 0:
distance.append(distance[-1])
else:
distance.append(df['Travel distance'][int(i / 2)]+distance[-1])
# Plot
plt.plot(time, distance)
plt.show()
要继续使用字符串格式的时间,您还可以在绘图上创建点并简单地连接所有点,但我没有这个想法的解决方案