You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Vincent的Python美国DMA地图添加数字标签需求

在Vincent DMA地图上添加三位数字编码标签

要给你的Vincent DMA地图添加三位数字编码标签,我们需要通过添加文本标记图层来实现,核心是获取每个DMA区域的中心坐标,然后将编码文本绑定到这些位置上。以下是完整的修改方案和代码:

步骤说明

  1. 获取DMA区域的中心坐标:加载DMA的TopoJSON数据,计算每个地理区域的质心(centroid),得到对应的经纬度坐标。
  2. 合并数据:将原始业务数据和中心坐标数据合并,确保每个DMA条目都有对应的坐标信息。
  3. 添加文本标记图层:创建文本类型的标记,绑定DMA编码和坐标,设置样式后添加到地图可视化中。

修改后的完整代码

import pandas as pd
import vincent as vi
import geopandas as gpd

vi.core.initialize_notebook()

# 加载你的业务数据
df = pd.read_csv('data.csv', sep=',')

# 加载DMA地理数据并计算每个区域的中心坐标
# 读取TopoJSON并转换为GeoDataFrame
gdf = gpd.read_file('https://raw.githubusercontent.com/simzou/nielsen-dma/master/nielsentopo.json')
# 计算每个DMA区域的质心(经纬度)
gdf['centroid'] = gdf.geometry.centroid
gdf['x'] = gdf.centroid.x  # 经度
gdf['y'] = gdf.centroid.y  # 纬度
# 将DMA编码格式化为三位字符串(比如1 → '001')
gdf['dma'] = gdf['dma'].astype(str).str.zfill(3)

# 合并业务数据和坐标数据,确保每个DMA都有对应坐标
merged_df = pd.merge(df, gdf[['dma', 'x', 'y']], on='dma', how='left')

# 创建基础地图可视化
geo_data = [
    {'name': 'dma', 
     'url': r'https://raw.githubusercontent.com/simzou/nielsen-dma/master/nielsentopo.json', 
     'feature': "nielsen_dma"} 
]
vis = vi.Map(
    data=merged_df, 
    geo_data=geo_data, 
    projection='albersUsa', 
    data_bind='numberDMA', 
    data_key='dma', 
    map_key={'dma': 'properties.dma'}
)

# 添加DMA编码标签的文本图层
text_mark = vi.Mark(
    type='text',
    props={
        # 使用地图的投影将经纬度转换为画布坐标
        'x': {'projection': 'projection', 'field': 'x'},
        'y': {'projection': 'projection', 'field': 'y'},
        # 绑定DMA编码作为文本内容
        'text': {'field': 'dma'},
        # 设置文本样式
        'fontSize': 7,
        'fill': '#000000',
        'textAlign': 'center',
        'textBaseline': 'middle'
    }
)
# 将文本标记添加到地图的图层列表中
vis.marks.append(text_mark)

# 导出可视化结果
vis.to_json('vega.json', html_out=True, html_path='map.html')

关键细节说明

  • 坐标处理:使用GeoPandas计算每个DMA区域的质心,确保标签精准定位在区域中心;通过Vega的投影配置,自动将经纬度转换为地图的画布坐标,无需手动转换投影。
  • 三位数字格式化:用str.zfill(3)将DMA编码统一格式化为三位字符串,保证显示一致性(比如单个数字的编码会补前导零)。
  • 文本样式调整:你可以根据需求修改fontSize、fill(文本颜色)等参数,避免标签重叠或与地图底色冲突。

内容的提问来源于stack exchange,提问作者JM92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:54:16