Plotly:如何为Choropleth地图添加数据标签
实现带数据标签的Plotly美国各州Choropleth地图
方法1:Plotly Express + Scattergeo快速实现
用Plotly Express生成基础地图,再通过add_scattergeo精准添加数据标签,核心是匹配美国州的地理编码规则:
import pandas as pd import plotly.express as px # 初始化数据 df = pd.DataFrame({ 'state': ['NY', 'CA', 'FL', 'NJ', 'TX', 'CT', 'MA', 'WA', 'IL', 'GA'], 'user_id': [10000, 3200, 1600, 1200, 800, 600, 400, 350, 270, 260] }) # 生成Choropleth基础地图 fig = px.choropleth( df, locations='state', locationmode='USA-states', # 关键:指定美国州缩写匹配模式 color='user_id', color_continuous_scale='Blues', scope='usa', # 聚焦美国本土地图 title='各州用户数量分布' ) # 添加数据标签 fig.add_scattergeo( locations=df['state'], locationmode='USA-states', text=df.apply(lambda x: f"{x['state']}\n{x['user_id']}", axis=1), # 自定义标签内容 mode='text', textfont=dict(size=12, color='black'), hoverinfo='skip' # 避免悬停信息冲突 ) fig.show()
方法2:Plotly Graph Objects底层控制
如果需要更精细的图层管理,直接用Graph Objects构建:
import pandas as pd import plotly.graph_objects as go df = pd.DataFrame({ 'state': ['NY', 'CA', 'FL', 'NJ', 'TX', 'CT', 'MA', 'WA', 'IL', 'GA'], 'user_id': [10000, 3200, 1600, 1200, 800, 600, 400, 350, 270, 260] }) fig = go.Figure() # 添加Choropleth颜色图层 fig.add_trace(go.Choropleth( locations=df['state'], z=df['user_id'], locationmode='USA-states', colorscale='Blues', colorbar_title='用户数量' )) # 添加文本标签图层 fig.add_trace(go.Scattergeo( locations=df['state'], locationmode='USA-states', text=df['user_id'].astype(str), mode='text', textfont=dict(color='black', size=12), hoverinfo='none' )) # 配置地图布局 fig.update_layout( title_text='各州用户数量分布', geo_scope='usa' ) fig.show()
关键修复点(解决之前add_scattergeo失败问题)
- 必须设置
locationmode='USA-states':这是让Plotly识别州缩写、自动匹配各州中心坐标的核心,缺失此参数会导致标签位置错乱。 mode='text'不可省略:只有设置该模式,Scattergeo才会渲染文本标签,而非默认的点标记。- 标签内容自定义:可以通过
df.apply生成包含州名+数值的组合标签,提升可读性。
内容的提问来源于stack exchange,提问作者equanimity
相关产品推荐
相关产品推荐

