MovingPandas
是一个用于时空数据分析的 Python 库,它扩展了 Pandas 和 GeoPandas,使得处理和分析带有时间戳的地理数据变得更加方便。虽然 MovingPandas
本身不直接提供数据可视化功能,但你可以结合其他库如 matplotlib
、folium
或 plotly
来绘制数据地图。
以下是一个简单的示例,展示如何使用 MovingPandas
和 matplotlib
来绘制带有时间戳的地理数据地图:
-
安装必要的库:
pip install movingpandas geopandas matplotlib pandas
-
导入库并准备数据:
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)
-
绘制地图:
由于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
库,并且它展示了如何创建带有时间动画的轨迹地图。你可以根据需要调整这些代码。