You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的Matplotlib可视化带时序方向的二维轨迹数据

二维时序轨迹可视化:方向标注与时间渐变实现

用颜色渐变体现时间推进

直接借助Matplotlib的颜色映射功能,把时间索引作为每个点的颜色依据,搭配暖到冷的色板,就能直观呈现时间推进的方向。

核心逻辑:拆分x、y坐标,用时间序列(比如0到999)作为颜色变量,选择RdYlBu_r这类反向色板(红→黄→蓝,对应起点到终点的时间变化),再添加颜色条说明时间对应关系,同时标记起止点强化认知。

代码示例:

import matplotlib.pyplot as plt
import numpy as np

# 替换成你的实际数据列表
x = [p[0] for p in your_data_list]
y = [p[1] for p in your_data_list]
time = range(len(x))  # 时间索引,对应每秒采样

plt.figure(figsize=(10,6))
# 带颜色渐变的散点+浅灰色辅助轨迹线
scatter = plt.scatter(x, y, c=time, cmap='RdYlBu_r', s=15, alpha=0.7)
plt.plot(x, y, color='lightgray', linewidth=0.5, alpha=0.5)

# 标记起止点,用醒目颜色+边框强化区分
plt.scatter(x[0], y[0], color='limegreen', s=120, edgecolor='black', label='起点')
plt.scatter(x[-1], y[-1], color='crimson', s=120, edgecolor='black', label='终点')

# 添加颜色条,标注时间含义
color_bar = plt.colorbar(scatter)
color_bar.set_label('时间(秒)', fontsize=12)

plt.xlabel('X坐标')
plt.ylabel('Y坐标')
plt.title('车辆行驶轨迹(颜色渐变表示时间推进)')
plt.legend()
plt.show()

解决箭头过于密集的问题

不用每个点之间都加箭头,两种实用方案任选:

方案1:固定间隔采样

每隔N个点画一个箭头,比如每50个点画一个,既保留方向信息,又不会杂乱:

# 间隔50个点添加箭头,可根据数据密度调整step值
step = 50
for i in range(0, len(x)-step, step):
    # 箭头从当前点指向step步后的点
    plt.arrow(x[i], y[i], x[i+step]-x[i], y[i+step]-y[i],
              head_width=0.3, head_length=0.4, fc='black', ec='black', alpha=0.6)

方案2:基于路径距离的自适应箭头

如果路径有直有弯,固定间隔可能在直线段浪费箭头、在弯道缺箭头。可以设置距离阈值,当车辆累计移动超过阈值时画箭头:

dist_threshold = 5.0  # 累计移动5个单位画箭头,根据你的坐标尺度调整
current_dist = 0.0
last_point_idx = 0

for i in range(1, len(x)):
    # 计算当前点与上一个点的距离
    segment_dist = np.sqrt((x[i]-x[i-1])**2 + (y[i]-y[i-1])**2)
    current_dist += segment_dist
    if current_dist >= dist_threshold:
        plt.arrow(x[last_point_idx], y[last_point_idx], 
                  x[i]-x[last_point_idx], y[i]-y[last_point_idx],
                  head_width=0.3, head_length=0.4, fc='black', ec='black', alpha=0.6)
        current_dist = 0.0
        last_point_idx = i

完整整合代码

把上述功能整合,得到一套完整的可视化代码:

import matplotlib.pyplot as plt
import numpy as np

# 替换成你的实际数据列表
your_data_list = [[np.random.randn(), np.random.randn()] for _ in range(1000)]
x = [p[0] for p in your_data_list]
y = [p[1] for p in your_data_list]
time = range(len(x))

plt.figure(figsize=(10,6))

# 颜色渐变轨迹
scatter = plt.scatter(x, y, c=time, cmap='RdYlBu_r', s=15, alpha=0.7)
plt.plot(x, y, color='lightgray', linewidth=0.5, alpha=0.5)

# 标记起止点
plt.scatter(x[0], y[0], color='limegreen', s=120, edgecolor='black', label='起点')
plt.scatter(x[-1], y[-1], color='crimson', s=120, edgecolor='black', label='终点')

# 添加间隔箭头
step = 50
for i in range(0, len(x)-step, step):
    plt.arrow(x[i], y[i], x[i+step]-x[i], y[i+step]-y[i],
              head_width=0.3, head_length=0.4, fc='black', ec='black', alpha=0.6)

# 装饰设置
color_bar = plt.colorbar(scatter)
color_bar.set_label('时间(秒)', fontsize=12)
plt.xlabel('X坐标', fontsize=12)
plt.ylabel('Y坐标', fontsize=12)
plt.title('车辆行驶轨迹可视化', fontsize=14)
plt.legend(fontsize=12)
plt.grid(alpha=0.3)
plt.show()

内容的提问来源于stack exchange,提问作者oskar szarowicz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 21:55:24