AgentSkillsCN

transbigdata-visualize

利用 TransBigData 进行交通数据可视化。适用于点分布热力图、轨迹动画、OD 流向图、底图加载、活动时空图等可视化任务。

SKILL.md
--- frontmatter
name: transbigdata-visualize
description: 使用 TransBigData 进行交通数据可视化。适用于点分布热力图、轨迹动画、OD流向图、底图加载、活动时空图等可视化任务。

TransBigData 可视化指南

安装

bash
pip install transbigdata keplergl matplotlib geopandas

Kepler 交互式可视化

需要安装 KeplerGl: pip install keplergl

1. 点分布可视化 - visualization_data()

python
import transbigdata as tbd

map = tbd.visualization_data(
    data,
    col=['Lng', 'Lat'],       # 或 ['Lng', 'Lat', 'count'] 带权重
    accuracy=500,              # 聚合精度
    height=500,                # 地图高度
    maptype='point'            # 'point' 或 'heatmap'
)
# 在 Jupyter 中显示
map

2. 轨迹可视化 - visualization_trip()

python
map = tbd.visualization_trip(
    trajdata,
    col=['Lng', 'Lat', 'VehicleNum', 'Time'],
    height=500
)

3. OD 可视化 - visualization_od()

python
map = tbd.visualization_od(
    oddata,
    col=['slon', 'slat', 'elon', 'elat'],  # 或加 'count'
    accuracy=500,        # OD 聚合精度
    mincount=0           # 最小流量阈值
)

Matplotlib 静态可视化

4. 加载底图 - plot_map()

python
import matplotlib.pyplot as plt
import transbigdata as tbd

# 设置 Mapbox token(可选,获取更好的底图)
# tbd.set_mapboxtoken('your_token')
# tbd.set_imgsavepath('./map_cache/')  # 缓存路径

bounds = [113.6, 22.4, 114.8, 22.9]  # 深圳范围

fig, ax = plt.subplots(1, 1, figsize=(12, 10))
tbd.plot_map(plt, bounds, zoom=12, style=4)

# style 选项: 0-12 或自定义 URL

底图样式:

  • 0-6: 不同风格的街道图
  • 7-12: 卫星图/混合图

5. 添加指北针和比例尺 - plotscale()

python
tbd.plotscale(
    ax,
    bounds=bounds,
    textsize=10,
    compasssize=1,
    accuracy=2000,      # 比例尺长度(米)
    rect=[0.06, 0.03]   # 位置
)

活动分析可视化

6. 活动时空图 - plot_activity()

绘制个体活动的时空分布。

python
tbd.plot_activity(
    stay_data,
    col=['stime', 'etime', 'group'],  # 开始时间、结束时间、分组
    figsize=(10, 5)
)

7. 置信椭圆 - ellipse_params() & ellipse_plot()

分析活动空间分布。

python
# 计算 95% 置信椭圆参数
ellip_params = tbd.ellipse_params(
    data,
    col=['lon', 'lat'],
    confidence=95,
    epsg=None  # 可选投影坐标系
)
# 返回: [中心坐标, 长轴, 短轴, 旋转角, 面积, 扁率]

# 绑定绘制椭圆
tbd.ellipse_plot(ellip_params, ax, edgecolor='red', facecolor='none')

8. 熵值分析 - entropy() & entropy_rate()

python
# 信息熵
h = tbd.entropy(data['location_sequence'])

# 熵率
hr = tbd.entropy_rate(data['location_sequence'])

完整示例

示例 1: 出租车热力图

python
import pandas as pd
import matplotlib.pyplot as plt
import geopandas as gpd
import transbigdata as tbd

# 加载数据
data = pd.read_csv('taxi_gps.csv')

# 500米栅格聚合
bounds = [113.75, 22.4, 114.62, 22.86]
params = tbd.area_to_params(bounds, accuracy=500)

data['LONCOL'], data['LATCOL'] = tbd.GPS_to_grid(
    data['Lng'], data['Lat'], params
)

grid_count = data.groupby(['LONCOL', 'LATCOL']).size().reset_index(name='count')
grid_count['geometry'] = tbd.grid_to_polygon(
    [grid_count['LONCOL'], grid_count['LATCOL']], params
)

gdf = gpd.GeoDataFrame(grid_count, geometry='geometry', crs='EPSG:4326')

# 可视化
fig, ax = plt.subplots(1, 1, figsize=(12, 10))
tbd.plot_map(plt, bounds, zoom=12, style=4)
gdf.plot(ax=ax, column='count', cmap='YlOrRd', alpha=0.7, legend=True)
tbd.plotscale(ax, bounds=bounds, textsize=10)
plt.title('出租车轨迹点密度 (500m栅格)')
plt.show()

示例 2: OD 流向图

python
import pandas as pd
import transbigdata as tbd

# 加载 OD 数据
od_data = pd.read_csv('taxi_od.csv')

# Kepler 可视化(Jupyter 环境)
map = tbd.visualization_od(
    od_data,
    col=['slon', 'slat', 'elon', 'elat'],
    accuracy=1000,  # 1公里聚合
    mincount=5      # 至少5条 OD
)
map

使用建议

  1. 底图缓存: 首次使用 plot_map 会下载底图,建议设置 set_imgsavepath()
  2. Mapbox Token: 获取更高质量底图需注册 Mapbox 并设置 token
  3. 聚合精度: 可视化时聚合精度通常设为 500m 或 1km
  4. Kepler 可视化: 在 Jupyter 中效果最佳,支持交互式操作

参考文档