如何在 Python Plotly 中单击数据点来打开 URL?

plotlypythonserver side programmingprogramming

Plotly 支持两个不同的库"Dash 应用程序中的 Plotly 图表"和"Plotly 图表对象和 Plotly Express"。

Dash 是一个 Python 框架,用于创建基于 Web 的交互式仪表板应用程序。例如,dash 库将所有​​必需的库添加到基于 Web 的仪表板应用程序。

导入 dash 核心组件和 HTML 组件。添加 plotly.express 方法来生成图表。使用 Dcc.Graph() 方法设置高度和宽度坐标的样式。

按照以下步骤通过单击数据点打开 URL。

步骤 1

导入 Dash 库。

import dash

步骤 2

导入 Dash 核心组件 dcchtml

from dash import dcc, html

步骤 3

使用以下模块导入 Dash 依赖项

from dash.dependencies import Input,Output

步骤4

plotly.express 模块和别名导入为 px

将 plotly.express 导入为 px

步骤 5

使用 pandas 模块生成数据集。让我们使用以下方法生成数据集并在 dataframe 字典中添加 URL。

df = pd.DataFrame(
   dict(
      x=[1, 2],
      y=[2, 4],
      urls=["https://www.tutorialspoint.com","https://plotly.com/dash/"],
   )
)

步骤 6

使用 URL 坐标生成散点图,

fig = px.scatter(df, x="x", y="y",custom_data=["urls"])

步骤 7

创建 update_layout() 方法以执行均匀点击并设置标记大小的轨迹。其定义如下,

fig.update_layout(clickmode='event+select')
fig.update_traces(marker_size=20)

步骤 8

div 部分中的 HTML 子项生成应用布局。其定义如下,

app.layout = html.Div([
   dcc.Graph(
      id="graph_interaction",
      figure=fig,
   ),
   html.Pre(id='data')
])

步骤 9

为"url onclick"事件生成函数。我们还将设置一个"if"条件来执行浏览器onclick事件。它定义如下,

@app.callback(
   Output('data', 'children'),
   Input('graph_interaction', 'clickData'))

def open_url(clickData):
   if clickData:

webbrowser.open(clickData["points"][0]["customdata"][0])
   else:
      raise PreventUpdate

步骤 10

创建主函数来运行服务器。

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

示例

在 Plotly 中单击数据点打开 URL 的完整代码如下 −

import webbrowser
import dash
from dash.exceptions import PreventUpdate
from dash import dcc, html
from dash.dependencies import Input, Output
import plotly.express as px
import pandas as pd
import json

app = dash.Dash(__name__)
df = pd.DataFrame(
   dict(
      x=[1, 2],
      y=[2, 4],
      urls=["https://www.tutorialspoint.com","https://plotly.com/dash/"],
   )
)
fig = px.scatter(df, x="x", y="y",custom_data=["urls"])
fig.update_layout(clickmode='event+select')
fig.update_traces(marker_size=20)

app.layout = html.Div(
   [
      dcc.Graph(
         id="graph_interaction",
         figure=fig,
      ),
      html.Pre(id='data')
   ]
)

@app.callback(
   Output('data', 'children'),
   Input('graph_interaction', 'clickData'))
def open_url(clickData):
   if clickData:
   webbrowser.open(clickData["points"][0]["customdata"][0
])
   else:
      raise PreventUpdate
      # return json.dumps(clickData, indent=2)
      
if __name__ == '__main__':
   app.run_server(debug=True)

输出

它将在控制台上显示以下输出。

Dash is running on http://127.0.0.1:8050/

 * Serving Flask app 'main'
 * Debug mode: on

单击 URL,它将在浏览器上显示输出 −


如果单击节点,它将被重定向到给定的 URL 链接。


相关文章