0

0

如何用 Python 绘制车辆行程累计距离-时间折线图(含停驶平段)

碧海醫心

碧海醫心

发布时间:2026-02-03 14:38:01

|

410人浏览过

|

来源于php中文网

原创

如何用 Python 绘制车辆行程累计距离-时间折线图(含停驶平段)

本文详解如何基于时间序列数据,绘制一条连续的累计距离-时间曲线,准确反映行驶(斜线)、停驶(原始答案中的“平段”实为行程间静止期)、停驶(水平线)及行程起止点,解决多趟行程拼接不连贯、时间解析错误等常见问题

在交通轨迹分析或车队调度可视化中,常需将离散的行程记录(如 Trip_Start、Trip_end、Travel distance)转化为连续的时间-累计距离曲线:行驶阶段呈上升斜线(距离随时间增加),行程间隔期呈水平线(距离不变,即车辆静止)。原始代码因未正确构建时间-距离对应点序列,导致图形断裂、逻辑错位。下面提供一套健壮、可扩展的实现方案。

✅ 核心思路:构造分段线性时间序列点

我们需要将每趟行程拆解为两个关键事件点:

  • 起点:(Trip_Start, 当前累计距离)
  • 终点:(Trip_end, 当前累计距离 + 本趟距离)

同时,为体现“行程间停驶”,需在上一趟终点与下一趟起点之间插入一个隐式静止段——即在 (Trip_end, 累计距离) 和 (下一趟 Trip_Start, 同一累计距离) 之间画水平线。因此,完整点序列为:

歌歌AI写歌
歌歌AI写歌

支持人声克隆的AI音乐创作平台,歌歌AI写歌 - 人人都是音乐家

下载
[ (t0_start, 0),
  (t0_end,   d0),
  (t1_start, d0),   ← 停驶开始(距离不变)
  (t1_end,   d0+d1),
  ... ]

✅ 完整可运行代码(支持任意多趟行程)

import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime
import numpy as np

# 示例数据(建议使用 DataFrame,便于扩展)
df = pd.DataFrame({
    '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_cumulative_distance(df, time_col_start='Trip_Start', time_col_end='Trip_end', 
                             dist_col='Travel distance', title='Journey Plot'):
    # ✅ 步骤1:按出发时间排序,确保时序正确
    df = df.sort_values(by=time_col_start).reset_index(drop=True)

    # ✅ 步骤2:将时间字符串转为 matplotlib 可识别的数值(单位:小时),支持跨日可扩展为 datetime
    def time_to_hours(t_str):
        h, m = map(int, t_str.strip().split(':'))
        return h + m / 60.0

    times_start = df[time_col_start].apply(time_to_hours)
    times_end   = df[time_col_end].apply(time_to_hours)

    # ✅ 步骤3:构建 x(时间)和 y(累计距离)坐标点列表
    xs, ys = [], []

    cumulative = 0.0
    for i, row in df.iterrows():
        t_start = times_start.iloc[i]
        t_end   = times_end.iloc[i]
        dist    = float(row[dist_col])

        # 行程起点:(t_start, cumulative)
        xs.append(t_start)
        ys.append(cumulative)

        # 行程终点:(t_end, cumulative + dist)
        xs.append(t_end)
        ys.append(cumulative + dist)

        # 更新累计距离(用于下一段)
        cumulative += dist

        # ✅ 关键:若非最后一趟,添加停驶过渡点 —— 下一趟开始前保持距离不变
        if i < len(df) - 1:
            next_t_start = times_start.iloc[i + 1]
            xs.append(next_t_start)
            ys.append(cumulative)  # 距离不变,形成水平线

    # ✅ 步骤4:绘图(使用 line plot 自动连接所有点)
    plt.figure(figsize=(10, 5))
    plt.plot(xs, ys, marker='o', markersize=4, linewidth=2, color='#2E86AB')

    # ✅ 可选:标注行程起止点(增强可读性)
    for i, (x, y) in enumerate(zip(xs, ys)):
        if i % 2 == 0 and i < len(xs)-1:  # 每趟起点(偶数索引)
            plt.annotate(f'Start {i//2+1}', (x, y), textcoords="offset points", 
                        xytext=(0,10), ha='center', fontsize=9, color='darkblue')
        elif i % 2 == 1:  # 每趟终点(奇数索引)
            plt.annotate(f'End {i//2+1}', (x, y), textcoords="offset points", 
                        xytext=(0,-15), ha='center', fontsize=9, color='crimson')

    # ✅ 设置坐标轴与标题
    plt.xlabel('Time (hours from 00:00)', fontsize=11)
    plt.ylabel('Cumulative Distance (km)', fontsize=11)
    plt.title(title, fontsize=13, fontweight='bold')
    plt.grid(True, alpha=0.3)
    plt.xticks(np.arange(0, 25, 1))  # 每小时刻度
    plt.tight_layout()
    plt.show()

# 调用绘图函数
plot_cumulative_distance(df)

⚠️ 注意事项与进阶提示

  • 时间格式鲁棒性:当前示例仅处理 HH:MM。若含日期(如 '2024-05-20 08:00'),应改用 pd.to_datetime() 并以 matplotlib.dates 模块处理 X 轴。
  • 多车区分:对 veh_ID 分组后循环调用该函数,并用不同颜色/图例区分。
  • 性能优化大数据量时,避免 for 循环构建点;可用 np.repeat + np.concatenate 向量化生成 xs/ys。
  • 视觉增强:可对行驶段用实线、停驶段用虚线,或用 plt.fill_between() 高亮活动区间。

该方法确保曲线物理意义清晰、数学连续、视觉直观,是时间序列行程可视化的核心范式。

立即学习Python免费学习笔记(深入)”;

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
PHP 高并发与性能优化
PHP 高并发与性能优化

本专题聚焦 PHP 在高并发场景下的性能优化与系统调优,内容涵盖 Nginx 与 PHP-FPM 优化、Opcode 缓存、Redis/Memcached 应用、异步任务队列、数据库优化、代码性能分析与瓶颈排查。通过实战案例(如高并发接口优化、缓存系统设计、秒杀活动实现),帮助学习者掌握 构建高性能PHP后端系统的核心能力。

102

2025.10.16

PHP 数据库操作与性能优化
PHP 数据库操作与性能优化

本专题聚焦于PHP在数据库开发中的核心应用,详细讲解PDO与MySQLi的使用方法、预处理语句、事务控制与安全防注入策略。同时深入分析SQL查询优化、索引设计、慢查询排查等性能提升手段。通过实战案例帮助开发者构建高效、安全、可扩展的PHP数据库应用系统。

90

2025.11.13

JavaScript 性能优化与前端调优
JavaScript 性能优化与前端调优

本专题系统讲解 JavaScript 性能优化的核心技术,涵盖页面加载优化、异步编程、内存管理、事件代理、代码分割、懒加载、浏览器缓存机制等。通过多个实际项目示例,帮助开发者掌握 如何通过前端调优提升网站性能,减少加载时间,提高用户体验与页面响应速度。

30

2025.12.30

全国统一发票查询平台入口合集
全国统一发票查询平台入口合集

本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

3

2026.02.03

短剧入口地址汇总
短剧入口地址汇总

本专题整合了短剧app推荐平台,阅读专题下面的文章了解更多详细入口。

8

2026.02.03

植物大战僵尸版本入口地址汇总
植物大战僵尸版本入口地址汇总

本专题整合了植物大战僵尸版本入口地址汇总,前往文章中寻找想要的答案。

6

2026.02.03

c语言中/相关合集
c语言中/相关合集

本专题整合了c语言中/的用法、含义解释。阅读专题下面的文章了解更多详细内容。

2

2026.02.03

漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题
漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题

本专题围绕漫蛙漫画(Manwa / Manwa2)官网网页版入口进行整理,涵盖漫蛙漫画官方主页访问方式、网页版在线阅读入口、台版正版漫画浏览说明及基础使用指引,帮助用户快速进入漫蛙漫画官网,稳定在线阅读正版漫画内容,避免误入非官方页面。

5

2026.02.03

Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口
Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口

本专题汇总了俄罗斯知名搜索引擎 Yandex 的官网入口、免登录访问地址、中文登录方法与网页版使用指南,帮助用户稳定访问 Yandex 官网,并提供一站式入口汇总。无论是登录入口还是在线搜索,用户都能快速获取最新稳定的访问链接与使用指南。

36

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号