如何将自定义数据添加到可绘制的 Scattermapbox 图

问题描述

我在地图上用 go.ScattermapBox 显示不同的气候测量站。现在我想通过在 customdata 命令中使用 hovertemplate 在悬停中包含多个不同的值。 这适用于作为图表一部分的值(如纬度、经度),但我无法弄清楚如何使 customdata 命令与外部数据一起工作(例如在悬停框中添加高度值)。

plot_data = [
    go.ScattermapBox(
        lon=data_slctd["longitude"],lat=data_slctd["latitude"],mode="markers",text = data_slctd.site_name.tolist(),hovertemplate =  "<b>%{text}</b><br><br>" + "longitude: %{lon:.2f}<br>" + "latitude: %{lat:.2f}<br>" + "altitude: %{customdata[0]:.0f}<br>"+ "ppm: %{marker.color:.2f}<extra></extra>",)
]

如教程 https://plotly.com/python-api-reference/generated/plotly.graph_objects.Scattermapbox.html 中所述(在“使用自定义数据和悬停模板将其他数据添加到悬停”下) 我曾尝试在 customdata == np.dstack((hover_1,hover_2)) 中包含 go.ScattermapBox 命令,但尝试使用 %customda[0}:.0f 访问悬停模板中 hover_1 的第一个值不起作用。

hover_1 和hover_2 保存了所有显示站的高度各自测量方法的值(即每个站的长度与站数相同)。

这就是悬停的样子:

Screenshot of exemplary hover

解决方法

可能 customdata 未显示是因为 customdata 数组的长度与 latlon 变量的长度不匹配。 当您执行 customdata[0] 时,您正在尝试获取 customdata 数组子列表的第一个元素。 例如,如果您有

x = [1,2,3],y = [3,4,5]

在情节图上,那么 customdata 应该是这样的:

customdata = [
  ["a","b"],["c","d"],["e","f"],]

这样,当您执行 customdata[0] 并将鼠标悬停在 (1,3) 上时,您将获得 a。 如果您将鼠标悬停在 2,4 上并执行 customdata[1],您将获得 d