在Python中绘制时间序列

问题描述 投票:0回答:1

这是我的数据示例:

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()

但是这是输出,而不是包含这些点的一条连续线: enter image description here

python matplotlib plot time-series
1个回答
0
投票

我并没有真正使用 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()

要继续使用字符串格式的时间,您还可以在绘图上创建点并简单地连接所有点,但我没有这个想法的解决方案

© www.soinside.com 2019 - 2024. All rights reserved.