Python绘制数据地图-MovingPandas

server/2025/1/22 16:57:42/

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/server/160513.html

相关文章

Stable Diffusion 提示词编写技巧及示例

Stable Diffusion 提示词(Prompt)的编写技巧及示例是生成高质量图像的关键。以下将结合我搜索到的资料,详细说明提示词的编写规则、技巧和示例。 一、提示词的基本规则与格式 分隔符:提示词之间需用英文逗号(,&#…

五、华为 RSTP

RSTP(Rapid Spanning Tree Protocol,快速生成树协议)是 STP 的优化版本,能实现网络拓扑的快速收敛。 一、RSTP 原理 快速收敛机制:RSTP 通过引入边缘端口、P/A(Proposal/Agreement)机制等&…

macOS如何进入 Application Support 目录(cd: string not in pwd: Application)

错误信息 cd: string not in pwd: Application 表示在当前目录下找不到名为 Application Support 的目录。可能的原因如下: 拼写错误或路径错误:确保你输入的目录名称正确。目录名称是区分大小写的,因此请确保使用正确的大小写。正确的目录名…

Android系统定制APP开发_如何对应用进行系统签名

前言 当项目开发需要使用系统级别权限或frame层某些api时,普通应用是无法使用的,需要在AndroidManifest中配置sharedUserId: AndroidManifest.xml中的android:sharedUserId“android.uid.system”,代表的意思是和系统相同的uid&a…

Chrome远程桌面无法连接怎么解决?

Chrome远程桌面连接已停止工作 Chrome远程桌面是一款极为便捷的浏览器插件,能够帮助用户将自己的计算机连接到其他设备,无论是手机、平板电脑还是其他电脑。然而,在实际使用中,许多用户可能会面临各种各样的问题,比如…

代码随想录day14

二叉树的反转,采用迭代,只能用前序和后序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(i…

如何写出优秀的提示词?ChatGPT官方的六种方法

使用ChatGPT时,提示词(Prompt)的质量直接影响到生成结果的好坏。ChatGPT官方文档中提供了六种优化提示词的方法,这些方法能够帮助用户更好地利用ChatGPT,提升其生成内容的准确性和实用性。本文将结合中文习惯和新的示例…

SSM旅游信息管理系统

🍅点赞收藏关注 → 添加文档最下方联系方式可咨询本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 …