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

相关推荐
郝学胜-神的一滴20 小时前
解析前端框架 Axios 的设计理念与源码
开发语言·前端·javascript·设计模式·前端框架·软件工程
Dream achiever20 小时前
10.WPF布局
开发语言·c#·wpf
HyperAI超神经20 小时前
【TVM 教程】设置 RPC 系统
开发语言·网络·人工智能·python·网络协议·rpc·tvm
yngsqq20 小时前
Lisp 与 C# 交互中,类型码(TypeCode)的映射关系
开发语言·c#·lisp
咕白m62520 小时前
使用 Python 删除 Excel 中的指定行、列
python
CodeNerd影20 小时前
prompt提示词工程---如何让大模型更听得懂人话
笔记·python·prompt
扑克中的黑桃A20 小时前
Python快速入门专业版(三):print 格式化输出:% 占位符、format 方法与 f-string(谁更高效?)
python
扑克中的黑桃A20 小时前
Python快速入门专业版(四):print 函数进阶:彩色输出、特殊格式与调试技巧
python
前端伪大叔20 小时前
第12篇|🔌 Freqtrade 交易所接入全解:API、WebSocket、限频配置详解
python·node.js
c8i20 小时前
drf中认证组件的初步使用
python·django