Python绘制数据地图-MovingPandas

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

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

  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()

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

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

相关推荐
Highcharts.js22 分钟前
智能数据分析组件Orbit 正式发布与快速上手体验教程
前端·人工智能·信息可视化·数据分析系统·highcharts·orbit·智能可视化
神仙别闹1 小时前
基于Python实现英词语自动对齐系统
开发语言·python
akinggw1 小时前
libagentcore - 一个基于c++的AI多agent系统升级到2.0版本
开发语言·jvm·c++
老歌老听老掉牙2 小时前
圆柱端面四平面交线及其在yoz面投影的几何解析与 Python 实现
开发语言·python·平面
lisw052 小时前
互联网上的数据结构可视化!
数据结构·信息可视化
我要见SA姐12 小时前
Chrome 扩展安全攻防实录:从权限滥用到供应链投毒
运维·人工智能·python·机器学习·自动化
2601_962885722 小时前
给 backtrader 接 A 股数据:用 AlphaFeed 喂PandasData
python
旖旎夜光2 小时前
【C++ 基础入门】命名空间、输入输出、缺省参数与函数重载
开发语言·c++·笔记·学习
YYYing.2 小时前
【Agent系列 (十一) 】上下文工程
人工智能·python·ai·agent·上下文工程
俩个逗号。。2 小时前
Kotlin flow 详解
android·开发语言·kotlin