Python绘制数据地图-MovingPandas

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

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

  1. 安装必要的库

    bash 复制代码
    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 库,并且它展示了如何创建带有时间动画的轨迹地图。你可以根据需要调整这些代码。

相关推荐
hbqjzx2 分钟前
记录一个自动学习的脚本开发过程
开发语言·javascript·学习
星星也在雾里24 分钟前
【管理多版本Python环境】Anaconda安装及使用
python·anaconda
Sirens.25 分钟前
Java核心概念:抽象类、接口、Object类深度剖析
java·开发语言·github
用户37215742613535 分钟前
使用 Python 将 CSV 文件转换为 PDF 的实践指南
python
大佬,救命!!!36 分钟前
算法实现迭代2_堆排序
数据结构·python·算法·学习笔记·堆排序
程序员阿鹏1 小时前
49.字母异位词分组
java·开发语言·leetcode
Yurko131 小时前
【C语言】基本语法结构(上篇)
c语言·开发语言·学习
总有刁民想爱朕ha1 小时前
Python自动化从入门到实战(24)如何高效的备份mysql数据库,数据备份datadir目录直接复制可行吗?一篇给小白的完全指南
数据库·python·自动化·mysql数据库备份
草莓熊Lotso2 小时前
《C++ Stack 与 Queue 完全使用指南:基础操作 + 经典场景 + 实战习题》
开发语言·c++·算法
孤客网络科技工作室2 小时前
Python - 100天从新手到大师:第五十七天获取网络资源及解析HTML页面
开发语言·python·html