Python绘制数据地图-MovingPandas

news/2025/1/23 15:20:58/

MovingPandas 是一个用于时空数据分析的 Python 库,它扩展了 Pandas 和 GeoPandas,使得处理和分析带有时间戳的地理数据变得更加方便。虽然 MovingPandas 本身不直接提供数据可视化功能,但你可以结合其他库如 matplotlibfoliumplotly 来绘制数据地图。

以下是一个简单的示例,展示如何使用 MovingPandasmatplotlib 来绘制带有时间戳的地理数据地图:

  1. 安装必要的库

    pip install movingpandas geopandas matplotlib pandas
    
  2. 导入库并准备数据

    python">import pandas as pd
    import geopandas as gpd
    from movingpandas import TrajectoryCollection, Trajectory
    import matplotlib.pyplot as plt# 示例数据:创建一些带有时间戳的地理数据点
    data = {'timestamp': ['2023-10-01 00:00:00', '2023-10-01 01:00:00', '2023-10-01 02:00:00','2023-10-01 00:00:00', '2023-10-01 01:00:00', '2023-10-01 02:00:00'],'geometry': ['POINT (1 1)', 'POINT (2 2)', 'POINT (3 3)','POINT (4 4)', 'POINT (5 5)', 'POINT (6 6)']
    }
    df = pd.DataFrame(data)
    df['timestamp'] = pd.to_datetime(df['timestamp'])
    gdf = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df.geometry.apply(lambda x: float(x.split()[1])),df.geometry.apply(lambda x: float(x.split()[0]))))# 创建轨迹对象
    trajectories = [Trajectory(gdf[gdf['geometry'] == f'POINT ({x} {y})'].copy().reset_index(drop=True))for x, y in zip([1, 4], [1, 4])]
    tc = TrajectoryCollection(trajectories)
    
  3. 绘制地图
    由于 MovingPandas 本身不提供绘图功能,我们可以使用 GeoPandas 的绘图功能来可视化地理数据。这里我们绘制每个时间点的位置。

    python"># 绘制所有轨迹点
    fig, ax = plt.subplots(1, 1, figsize=(10, 6))for trajectory in tc.trajectories:for point in trajectory.df.itertuples(index=False, name=None):plt.plot(point.geometry.x, point.geometry.y, 'bo')  # 'bo' 表示蓝色圆点# 设置坐标轴范围和标签
    plt.xlim(0, 7)
    plt.ylim(0, 7)
    plt.xlabel('Longitude')
    plt.ylabel('Latitude')
    plt.title('Trajectory Points')
    plt.grid(True)
    plt.show()
    

请注意,这个示例非常基础,只是简单地绘制了每个时间点的位置。如果你需要更复杂的时空数据可视化,比如动态地图或轨迹动画,可以考虑使用 foliumplotly

例如,使用 plotly 绘制动态轨迹:

python">import plotly.express as px# 将轨迹数据转换为适合 plotly 的格式
plotly_data = []
for trajectory in tc.trajectories:plotly_data.append(trajectory.df[['geometry', 'timestamp']].rename(columns={'geometry': 'geometry (lat, lon)'}))# 由于 plotly 不直接支持 GeoPandas 的 geometry 列,我们需要将其转换为经纬度列
for df in plotly_data:df['lat'] = df['geometry (lat, lon)'].apply(lambda x: float(x.y))df['lon'] = df['geometry (lat, lon)'].apply(lambda x: float(x.x))df.drop(columns=['geometry (lat, lon)'], inplace=True)# 合并轨迹数据
plotly_data = pd.concat(plotly_data).reset_index(drop=True)# 使用 plotly 绘制
fig = px.scatter_geo(plotly_data, lat='lat', lon='lon', color='index', hover_name='timestamp',animation_frame='timestamp', title='Trajectory Animation')
fig.show()

这个 plotly 示例需要安装 plotly 库,并且它展示了如何创建带有时间动画的轨迹地图。你可以根据需要调整这些代码。


http://www.ppmy.cn/news/1565513.html

相关文章

蓝桥杯训练—矩形面积交

文章目录 一、题目二、示例三、解析四、代码 一、题目 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴,对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程写出两个矩形的交的面积 输入格式: 输入包含两行…

ICLR顶会论文学习|DRL-based改进启发式求解方法JSSP

论文名:Deep Reinforcement Learning Guided Improvement Heuristic for Job Shop Scheduling Authors: Cong Zhang, Zhiguang Cao, Wen Song, Yaoxin Wu, Jie Zh… 论文发表致:ICLR 2024 论文链接:https://doi.org/10.48550/arXiv.2211.1…

@Contended

Contended 是 Java 8 引入的一个注解,主要用于减少多线程环境下的伪共享(False Sharing)问题。伪共享是由于缓存行的争用导致的性能问题,特别是在多核处理器上。 ### Contended 注解的作用 - **减少伪共享**:当多个线…

循环队列(C语言)

从今天开始我会开启一个专栏leetcode每日一题,大家互相交流代码经验,也当作我每天练习的自我回顾。第一天的内容是leetcode622.设计循环队列。 一、题目详细 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO&#…

神卓S500异地监控组网:高效、灵活的解决方案

神卓S500异地监控组网:高效、灵活的解决方案 随着企业规模的扩大和业务的多元化,异地监控的需求日益增长。神卓S500作为一款高性价比的智能组网设备,为企业和组织提供了高效、灵活的异地监控组网解决方案,满足了多场景下的监控需求…

Titans: 学习在测试时记忆 - 论文解读与总结

论文地址:https://arxiv.org/pdf/2501.00663v1 本文介绍了一篇由 Google Research 发表的关于新型神经网络架构 Titans 的论文,该架构旨在解决传统 Transformer 在处理长序列时的局限性。以下是对论文的详细解读,并结合原文图片进行说明&…

R语言学习笔记之开发环境配置

一、概要 整个安装过程及遇到的问题记录 操作步骤备注(包含遇到的问题)1下载安装R语言2下载安装RStudio3离线安装pacman提示需要安装Rtools4安装Rtoolspacman、tidyfst均离线安装完成5加载tidyfst报错 提示需要安装依赖,试错逐步下载并安装…

抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目

写这篇文章的初衷并不是要大家真的不用node和vscode,说实话前端发展成今天这样,在实际开发中确实离不开node和vscode这类工具了,但往往工具用多了我们自己也成了一个工具人! 这篇文章的缘由 最近在开发wordpress插件的时候&…