You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

地质热力图可视化问题:为何图表无法显示?

问题诊断与修复方案

你的代码没能显示预期的热力图,主要有几个核心问题,我来一一拆解并给出解决办法:

1. 缺少必要的Mapbox配置与布局参数

Densitymapbox组件依赖Mapbox的地图底图服务,默认情况下如果不指定底图样式、地图中心和缩放级别,要么底图加载不出来,要么你的数据点不在当前视图范围内,导致看起来像没渲染。

2. 缺少密度计算的权重参数z

Densitymapbox需要z参数来计算每个点的密度权重,即使所有点的权重相同,也需要显式传入这个参数,否则组件无法正常生成热力效果。

3. 样本数据量过少(次要原因)

你只有7个坐标点,热力图是基于密度聚合的,少量数据的热力效果会非常淡,甚至几乎看不到,调大扩散半径可以缓解这个问题。


修复后的完整代码

下面是调整后的可运行代码,我还加入了示例数据的构造(方便你直接测试):

import plotly.graph_objects as go
import pandas as pd

# 构造你的数据集(如果已有df可跳过这部分)
data = {
    'lat': [25.09740093, 25.11258035, 25.0777321, 25.1337145, 25.193982, 25.0372255, 25.068809],
    'lon': [55.1368825, 55.2587537, 55.13890908, 55.192437, 55.2769135, 55.216955, 55.326105]
}
df = pd.DataFrame(data)

# 创建热力图组件,补充必要参数
fig = go.Figure(go.Densitymapbox(
    lat=df['lat'],
    lon=df['lon'],
    z=[1]*len(df),  # 每个点的权重,统一设为1,可按需调整
    radius=15  # 调大扩散半径,让少量数据的热力效果更明显
))

# 配置Mapbox底图与视图布局
fig.update_layout(
    mapbox_style="open-street-map",  # 使用无需令牌的公开底图
    mapbox_center={"lat": 25.1, "lon": 55.2},  # 对准你的数据中心坐标
    mapbox_zoom=10,  # 调整缩放级别,确保数据区域清晰显示
    height=600  # 设置图表高度,提升视觉效果
)

fig.show()

关键修复点说明

  • z参数:必须传入,用于定义每个坐标点对热力密度的贡献值,这里统一设为1,如果你有业务权重可以替换成对应列。
  • radius参数:控制每个点的扩散范围,数据量少的时候调大(比如15-20),能让热力效果更直观。
  • Mapbox布局open-street-map是无需申请令牌的公开底图,如果你想用更美观的Mapbox官方样式,可以去Mapbox官网免费获取访问令牌,然后在update_layout中添加mapbox_access_token="你的令牌",并替换mapbox_stylemapbox://styles/mapbox/light-v10这类官方样式。
  • 视图对准:通过mapbox_centermapbox_zoom确保你的数据点在地图视野中心,避免出现“热力图在视野外”的情况。

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

火山引擎 最新活动