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

相关推荐
Jay_2720 分钟前
python项目如何创建docker环境
开发语言·python·docker
xlsw_27 分钟前
MyBatis之测试添加功能
java·开发语言·mybatis
忘梓.36 分钟前
从二叉树到 STL:揭开 set 容器的本质与用法
开发语言·c++
老胖闲聊39 分钟前
Python Django完整教程与代码示例
数据库·python·django
爬虫程序猿42 分钟前
利用 Python 爬虫获取淘宝商品详情
开发语言·爬虫·python
noravinsc42 分钟前
django paramiko 跳转登录
后端·python·django
声声codeGrandMaster1 小时前
Django之表格上传
后端·python·django
曹勖之1 小时前
在MATLAB中使用自定义的ROS2消息
开发语言·matlab·机器人·ros·simulink·ros2
元直数字电路验证1 小时前
Python数据分析及可视化中常用的6个库及函数(一)
python·numpy
waterHBO1 小时前
一个小小的 flask app, 几个小工具,拼凑一下
javascript·vscode·python·flask·web app·agent mode·vibe coding