Python & Plotly:将悬停数据添加到密度热图

Posted

技术标签:

【中文标题】Python & Plotly:将悬停数据添加到密度热图【英文标题】:Python & Plotly: Adding Hover Data to Density Heat Map 【发布时间】:2021-11-28 19:54:39 【问题描述】:

作为一个简单的例子,我使用了Plotly 2D Histograms 网页上显示的第一个热图。 documentation 引用了 hover_data 参数,但我无法显示其他数据。示例中的数据框包括以下列:

>>> df.columns
Index(['total_bill', 'tip', 'sex', 'smoker', 'day', 'time', 'size'], dtype='object')

根据上述文档,可以像这样添加悬停数据,例如“大小”:

>>> fig = px.density_heatmap(df, x="total_bill", y="tip", hover_data=['size'])
>>> fig.show()

但是,生成的绘图仅在悬停数据中显示“total_bill”、“tip”和“count”。我错过了什么?

【问题讨论】:

【参考方案1】:

感谢 Derek 的建议和 SO Q&A,我使用 hover_templategraph_objectscustomdata 绘制数据,但未显示“烟雾”字段的自定义悬停数据。

import plotly.graph_objects as go
import plotly.express as px


df = px.data.tips()

fig = go.Figure(
    data=go.Histogram2d(
        x=df['total_bill'], 
        y=df['tip'],
        z=df['size'],
        histfunc='sum',
        customdata=[df['smoker']]
    )
)

fig.update_traces(
    hovertemplate='<br>'.join([
        'Bill $: %x',
        'Tip $: %y',
        'Size: %z',
        'Smokes: %customdata[0]'
    ])
)

fig.show()

【讨论】:

这项工作是否符合您的预期? 没有。悬停文本显示为文字文本:“Smokes: %customdata[0]”。我在GitHub 上提出了一个问题。查看他们的回复。【参考方案2】:

这绝对是px.density_heatmap 的一个错误。运行fig = px.density_heatmap(df, x="total_bill", y="tip", hover_data=['size']) 后,悬停模板应包含size 列,但悬停模板字符串不包含正确信息。

fig.data[0].hovertemplate
'total_bill=%x<br>tip=%y<br>count=%z<extra></extra>'

为了比较,如果我们运行:fig = px.scatter(df, x="total_bill", y="tip", hover_data=['size']),我们可以看到 hovertemplate 确实包含了嵌入在 customdata 中的 size 列:

fig.data[0].hovertemplate
'total_bill=%x<br>tip=%y<br>size=%customdata[0]<extra></extra>'

您可能暂时需要使用 Plotly graph_objects 在悬停时在热图中显示额外的 df 列。如果你愿意,我可以在这个答案上圈出来给你看!

【讨论】:

我将此SO issue/answer 用作解决方案的参考。我会回答我自己的问题。感谢您的建议。 这显然不是真正的错误。见github.com/plotly/plotly.py/issues/3419

以上是关于Python & Plotly:将悬停数据添加到密度热图的主要内容,如果未能解决你的问题,请参考以下文章

python plotly - 悬停有时会显示多个值

如何使用 Plotly 在 Python 中使用 Pandas 数据框列设置散点图悬停信息

两个或多个热图的 Python Plotly 悬停信息

Python/Plotly:如何使用要显示的信息自定义悬停模板?

Python plotly scatter_geo 修改悬停数据

如何在 Python 3 的 Plotly 中将其悬停在折线图中一次显示数据点及其标签?