首页 > 其他分享 >使用 Dash 库构建可交互的数据展示 Web 应用

使用 Dash 库构建可交互的数据展示 Web 应用

时间:2024-05-31 21:33:38浏览次数:27  
标签:Web dash image dcc Dash html import 交互 app

概述

Dash 是一个 Python 库,脱胎于 Plotly,可以很方便构建可交互的数据展示 Web 应用。

快速入门

安装

pip install dash

基本结构

一个 Hello World 示例,可以看到 dash app 是如何创建的:

from dash import Dash, html

app = Dash()
app.layout = [html.Div(children='Hello World')]

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

可见,

  • app = Dash() 创建一个 app 实例
  • app.run() 运行这个 app 实例
  • app.layout 列表可以进行赋值,能直接将 html 元素放进去

要自定义页面元素,往 app.layout 列表塞东西即可。

Table 和 Graph

假设现在有一个 pandas 表格,

df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminder2007.csv')

可以通过 dash_table.DataTabledoc.Graph 绘制表格和柱状图。

from dash import dash_table, dcc
import plotly.express as px
···
app.layout = [
    ···
    dash_table.DataTable(data=df.to_dict('records'), page_size=10),
    dcc.Graph(figure=px.histogram(df, x='continent', y='lifeExp', histfunc='avg'))
]

Callback 控制

单选框 dcc.RadioItems。需要传入一个独一无二的 id

dcc.RadioItems(options=['pop', 'lifeExp', 'gdpPercap'], value='lifeExp', id='controls-and-radio-item')

目标是给这个单选框绑一个 Callback,控制柱状图的显示。柱状图控件也要传入 id

dcc.Graph(figure={}, id='controls-and-graph')

Callback 使用修饰器 callback 进行定义。修饰器会很直观地定义:

  • 用哪个 id 的控件的元素作为输入
  • 对哪个 id 的控件的元素进行输出
from dash import callback, Output, Input

@callback(
    Output(component_id='controls-and-graph', component_property='figure'),
    Input(component_id='controls-and-radio-item', component_property='value'),
)
def update_graph(col_chosen):
    fig = px.histogram(df, x='continent', y=col_chosen, histfunc='avg')
    return fig

不需要额外的绑定,给函数写好 callback 修饰器即可。

一些常用操作

这一节会省略 import 操作。

借助 Div 避免贴边

dash.html.Div 是 html5 <div> 的封装,可以传入 style 参数。

可以不再向 app.layout 传入 List,而是传入一个 html.Div 对象。所需元素放到省略号内就行。

app.layout = html.Div(
    [
        ···
    ],
    style={
        'margin': 'auto',
        'max-width': '80%',
    },
)

Markdown

直接写入 Markdown 语法文段:

dcc.Markdown(
    '''
# My first try
'''
)

结合 html.Div 使用可以避免贴住左边。

显示图片

本节参考

第一种方法,使用 html5 <img> 的封装 html.Img

# 传入图片路径
image_path = 'assets/my-image.png'
html.Img(src=image_path)
# 或者使用 base64
import base64

image_path = 'assets/my-image.png'
def b64_image(image_filename):
  with open(image_filename, 'rb') as f:
      image = f.read()
return 'data:image/png;base64,' + base64.b64encode(image).decode('utf-8')

html.Img(src=b64_image(image_path))

第二种方法,借助 plotly.express。优势是可以传入 numpy 矩阵。

dcc.Graph(
    figure=px.imshow(
        cv2.imread("test.jpg",)[..., [2, 1, 0]]  # BGR -> RGB
    )
)

cv2 读取的通道顺序默认是 BGR。

from PIL import Image

dcc.Graph(
    figure=px.imshow(Image.open("test,jpg"))
)

高级自定义

悬停文本自定义

参考来源

使用 .update_traces() 设置 hovertemplate,自定义节点的悬停文本。

import plotly.express as px

fig = px.scatter(df_2007, x="gdpPercap", y="lifeExp", log_x=True, color='continent')

fig.update_traces(hovertemplate='GDP: %{x} <br>Life Expectancy: %{y}')
fig.update_traces(hovertemplate=None, selector={'name':'Europe'}) # revert to default hover

标签:Web,dash,image,dcc,Dash,html,import,交互,app
From: https://www.cnblogs.com/chirp/p/18225306

相关文章

  • Web Service和Web API
    WebService和WebAPIWebService理解:WebService是一种基于网络的服务,它使用标准化的消息传递协议,最典型的是基于 SOAP(SimpleObjectAccessProtocol)协议。SOAP使用 XML格式封装数据,定义了消息的结构和传输方式,因此它是一个重量级的解决方案。WebService 支持跨平台、......
  • 基于WebSocket的modbus通信(一)- 服务器
    ModbusTcp协议是基于tcp的,但不是说一定要通过tcp协议才能传输,只要能传输二进制的地方都可以。比如WebSocket协议。但由于目前我只有tcp上面的modbus服务器实现,所以我必须先用tcp连接借助已有工具来验证我的服务器是否写正确。效果ModBusTCP协议报文ModBusTCP协议报文比较复......
  • web安全 CSRF篇
    一、CSRF是什么?CSRF,全称跨站请求伪造(Cross-SiteRequestForgery),也被称为XSRF、SeaSurf或SessionRiding。它是一个网络安全漏洞,允许攻击者诱使用户执行他们不打算执行的操作。简单来说,就是攻击者欺骗用户的浏览器去执行一些非用户本意的操作。 二、CSRF的攻击原理用户C......
  • web安全 学习心得
    xss篇漏洞原理首先,XSS漏洞(跨站脚本攻击)是一种发生在Web前端的漏洞,它允许攻击者在页面中注入恶意的脚本代码。当受害者访问这个页面时,这些恶意代码就会在受害者的浏览器上执行呢。具体那XSS漏洞的原理可以分为以下几个步骤: 注入阶段:攻击者通过各种方式(比如表单、URL参数......
  • 社区来稿|眼手交互能定义下一代人机交互范式吗?
    以下文章来源于XR交互技术观察,作者Eis4TY 前面的话: 推荐一篇来自Rokid产品经理Eis4TY的文章。文章探讨了眼手交互技术的原理、应用现状以及未来的发展趋势。作者提出:「在XR设备上,眼手交互不是最终答案,而是多模态混合交互的起点。」 也推荐你关注Eis4TY出品的「X......
  • Web基础与HTTP协议
    一、HTTP协议1.http相关概念互联网:是网络的网络,是所有类型网络的母集因特网:世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上,大家把连接在因特网上的计算机都成为主机。万维网:WWW(worldwideweb)万维网并非某种特殊的计算机网络,是一个大规模的、联机式的信......
  • 如何使用CloudRecon扫描Web应用程序并从SSL证书中发现有效资产
    关于CloudReconCloudRecon是一款功能强大的Web应用程序资产扫描与识别工具,该工具可以帮助广大研究人员对目标Web应用程序执行扫描,并从证书中识别出有价值的资产数据。CloudRecon本质上是一个工具集,由三个组件组成,可以帮助红队研究人员和漏洞Hunter快速在目标环境中寻找有价......
  • HLS、HTTP+FLV、DASH
    HLS、HTTP+FLV和DASH是三种常见的流媒体传输协议,它们在技术实现、使用场景和优缺点方面都有显著的区别。以下是对它们的关系和区别的详细解释,以及当前最流行的流媒体传输协议的讨论。HLS(HTTPLiveStreaming)开发者:由Apple开发。工作原理:将视频切片成小的TS文件......
  • 小程序webView 实现小程序内嵌H5页面
    web-view|微信开放文档本案例新建了一个 webView页面 只渲染webView组件配置路由,跳转页面的时候 前缀使用‘/subPages/webView/index?weburl=https://xxxxx’componentDidMount 的时候 获取路由中的 weburl 地址参数asynccomponentDidMount(){co......
  • 鸿蒙HarmonyOS实战-Web组件(Cookie及数据存储)
    ......