首页 > 解决方案 > 如何在 Python Dash 中触发 mouseout 事件?

问题描述

mouseout当不悬停在数据点上时,如何实现一个回调函数来响应并恢复默认值?

我简化了从 Plotly|Dash 教程的“交互式可视化”部分截取的代码来说明我的问题。在此示例中,callback函数返回mouseover信息。如何返回默认值mouseout

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.express as px
import pandas as pd

app = dash.Dash(__name__)

df = pd.DataFrame({
    "x": [1,2,1,2],
    "y": [1,2,3,4]
})

fig = px.scatter(df, x="x", y="y") 
fig.update_traces(marker_size=20)

app.layout = html.Div([
    dcc.Graph(
        id='basic-interactions',
        figure=fig
    ),
    html.Div([
        html.Pre(id='hover-data')
    ])
])

@app.callback(
    Output('hover-data', 'children'),
    Input('basic-interactions', 'hoverData'))
def display_hover_data(hoverData):
    if hoverData:
        return str(hoverData)
    else:
        return "hover over data point"

if __name__ == '__main__':
    app.run_server(debug=True)

标签: pythoncallbackmouseoverplotly-dashmouseout

解决方案


您可以clear_on_unhover在以下位置设置属性dcc.Graph

clear_on_unhover(布尔值;默认为 False):如果为 True,则当用户从某个点“悬停”时,clear_on_unhover 将清除 hoverData 属性。如果为 False,则 hoverData 属性将等于最后一个悬停点的数据。

所以改变这个:

dcc.Graph(id="basic-interactions", figure=fig)

对此:

dcc.Graph(id="basic-interactions", figure=fig, clear_on_unhover=True)

on unhoverhoverData将等于None,因此示例中的回调可以保持不变。"hover over data point"将在 unhover 时返回。


推荐阅读