Dash㉖(グラフ上のマウス動作)

マウス動作

DashではGraphコンポーネントの属性から、グラフ上の要素の情報をマウス操作から取得することができます。

マウス操作で取得できる情報は下記の通りです。

属性 内容
hoverData グラフ上の1つの要素をホバーで取得する。
clickData グラフ上の1つの要素をクリックで取得する。
relayoutData グラフ上の指定した範囲の位置データを取得する。
selectedData グラフ上の複数要素を「右クリック+Shift」またはドラッグで取得する。

ホバー取得 (hoverData属性)

hoverData属性を使って、マウスカーソルをあてた散布図のデータを表示するアプリケーションを作成します。

[ソースコード]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import json

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

gapminder = px.data.gapminder() # データの読み込み
gapminder2007 = gapminder[gapminder['year'] == 2007]

app = dash.Dash(__name__) # Dashインスタンスを生成

app.layout = html.Div(
[
html.H1('Gapminder Graph'),
# 散布図
dcc.Graph(
id='graph1',
figure=px.scatter(
gapminder2007, x='gdpPercap', y='lifeExp', hover_name='country'
)
),
# ホバーデータを表示するコンポーネント
html.P(id='hover_text', style={'fontSize':'40', 'textAlign':'center'})
],
style={'width':'90%', 'fontSize':'40', 'textAlign':'center'}
)


# コールバック
@app.callback(
Output('hover_text', 'children'),
Input('graph1', 'hoverData')
)
def show_text(text):
return json.dumps(text)

if __name__ == '__main__':
app.run_server(debug=True) # アプリケーションを起動

コールバック関数の入力項目にはhoverDataを指定し、関数内ではhoverData属性から取得した文字列を返しています。

[ブラウザで表示]

グラフ上をマウスオーバーすると、グラフの下にカーソルをあてた箇所のデータが表示されます。