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

如何让Plotly.express density_mapbox的点半径随calc_dis_m值变化?

问题

我正在使用plotly.express的density_mapbox函数,代码如下:

fig = px.density_mapbox(calc_data, lat='latitude', lon='longitude', size='calc_dis_m', radius=10, mapbox_style="stamen_terrain")
fig.show()

当前绘图正常,但我希望让图中点的半径基于数据框中的calc_dis_m值,使较小的calc_dis_m对应较小的点,较大的值对应较大的点。请问能否在density_mapbox函数中实现这一需求?

解答

首先明确:px.density_mapbox是生成密度热力图的函数,它的radius参数是控制热力扩散的全局固定值,无法直接绑定数据列实现动态变化。根据你的需求,有两种可行方案:

方案1:改用scatter_mapbox实现离散点大小随数据变化

如果核心需求是显示离散的点,并让点的大小对应calc_dis_m的值,直接用px.scatter_mapbox即可,这个函数原生支持size参数绑定数据列:

import plotly.express as px

fig = px.scatter_mapbox(
    calc_data,
    lat='latitude',
    lon='longitude',
    size='calc_dis_m',  # 直接绑定数据列控制点的大小
    size_max=30,  # 可自定义最大点的尺寸,避免部分点过大影响展示
    mapbox_style="stamen_terrain"
)
fig.show()

方案2:手动添加动态半径的密度层(保留热力效果)

如果需要保留density_mapbox的热力扩散效果,同时让每个点的扩散半径随calc_dis_m变化,可以使用plotly.graph_objects手动遍历数据添加独立的密度层:

import plotly.graph_objects as go

fig = go.Figure()
# 遍历每一行数据,添加对应半径的密度层
for idx, row in calc_data.iterrows():
    # 根据数据范围调整radius的比例,避免半径过大或过小
    adjusted_radius = row['calc_dis_m'] / 100
    fig.add_trace(go.Densitymapbox(
        lat=[row['latitude']],
        lon=[row['longitude']],
        radius=adjusted_radius,
        z=[1]  # 密度值统一设为1即可
    ))

fig.update_layout(mapbox_style="stamen_terrain")
fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:36:34