【Dash】使用 Bootstrap Componnet 创建图表

一、Styling Your App

The examples in the previous section used Dash HTML Components to build a simple app layout, but you can style your app to look more professional. This section will give a brief overview of the multiple tools that you can use to enhance the layout style of a Dash app:

  • HTML and CSS
  • Dash Design kit (DDK)
  • Dash Bootstrap Components
  • Dash Mantine Components

二、Dash Bootstrap Components

Dash Bootstrap is a community-maintained library built off of the bootstrap component system. Although it is not officially maintained or supported by Plotly, Dash Bootstrap is a powerful way of building elegant app layouts. Notice that we first define a row and then the width of columns inside the row, using thedbc.Row and dbc.Colcomponents.

For the app below to run successfully, make sure to install the Dash Bootstrap Components library: pip install dash-bootstrap-components.

python 复制代码
# Import packages
from dash import Dash, html, dash_table, dcc, callback, Output, Input
import pandas as pd
import plotly.express as px
import dash_bootstrap_components as dbc

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

# Initialize the app - incorporate a Dash Bootstrap theme
external_stylesheets = [dbc.themes.CERULEAN]
app = Dash(__name__, external_stylesheets=external_stylesheets)

# App layout
app.layout = dbc.Container([
    dbc.Row([
        html.Div('My First App with Data, Graph, and Controls', className='text-primary text-center fs-3')
    ]),
    dbc.Row([
        dbc.RadioItems(options=[{'label': x, 'value': x} for x in ['pop', 'lifeExp', 'gdpPercap']],
                       value='lifeExp',
                       inline=True,
                       id='radio-buttons-final')
    ]),
    dbc.Row([
        dbc.Col([
            dash_table.DataTable(data=df.to_dict('records'), page_size=12, style_table={'overflowX': 'auto'})
        ], width=6),
        dbc.Col([
            dcc.Graph(figure={}, id='my-first-graph-final')
        ], width=6),
    ]),
], fluid=True)

# Add controls to build the interaction
@callback(
    Output(component_id='my-first-graph-final', component_property='figure'),
    Input(component_id='radio-buttons-final', component_property='value')
)
def update_graph(col_chosen):
    fig = px.histogram(df, x='continent', y=col_chosen, histfunc='avg')
    return fig


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

三、解读

Dash Bootstrap Components 是 Dash 的一个拓展包,提供了一组预定义的 Bootstrap 样式组件。

python 复制代码
# Import packages
from dash import Dash, html, dash_table, dcc, callback, Output, Input
import pandas as pd
import plotly.express as px
import dash_bootstrap_components as dbc
  • 导入Python 库。Dash 用于创建 Web 应用,pandas 用于数据处理,plotly.express 用于创建图表,dash_bootstrap_component 用于提供 Bootstrap 样式的组件。
python 复制代码
# Incoporate data
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminder2007.csv')
  • 使用 pandas 的 read_csv 函数从URL 数据文件中加载数据到 DataFrame df。
python 复制代码
# Initialize the app - incorporate a Dash Bootstrap theme
external_stylesheets = [dbc.theme.CERULEAN]
app = Dash(__name__, external_stylesheets=external_stylesheets)
  • 初始化 Dash 应用并设置外部样式表,这里使用了 Dash Bootstrap Component 的 CERULEAN 主题(天蓝色主题)
python 复制代码
# App layout
app.layout = dbc.Container([
        #...
], fluid=True)
  • 定义应用的布局,使用 dbc.Container 作为根容器
  • fluid=True 使容器宽度自适应屏幕宽度。
python 复制代码
dbc.Row([
    html.Div('My First App with Data, Graph, and Controls', className='text-primary text-center fs-3')
]),
  • 创建一个 dbc.Row 容器,包含一个 html.Div 组件,显示应用的标题。
python 复制代码
dbc.Row([
    dbc.RadioItems(options=[{'label': x, 'value': x} for x in ['pop', 'lifeExp', 'gdpPercap']], value='lifeExp', inline=True, id='radio-buttons-final')
]),
  • 创建一个 dbc.Row 容器,包含 dbc.RadioItems 组件,用于创建一组单选按钮,选项为['pop', 'lifeExp', 'gdpPercap']。
python 复制代码
dbc.Row([
    dbc.Col([
        dash_table.DataTable(data=df.to_dict('records'), page_size=12, style_table={'overflowX': 'auto'})
        ], width=6),
    dbc.Col([
        dcc.Graph(figure={}, id='my-first-graph-final')
    ], width=6),
]),
  • 创建一个 dbc.Row 容器,包含两个 dbc.Col 组件,分别占据 6 列宽度。
  • 第一个 dbc.Col 包含 dash_table.DataTable 组件,用于显示数据表
  • 第二个 dbc.Col 包含 dcc.Graph 组件,用于显示图表
python 复制代码
@callback(
    Output(component_id='my-first-graph-final', component_property='figure'),
    Input(component_id='radio-buttons-final', component_property='value')
)
def update_graph(col_chosen):
    fig = px.histogram(df, x='continent', y=col_chosen, histfunc='avg')
    return fig
)
  • 定义一个回调函数 update_graph,它根据 dbc.RadioItems 组件的选中值动态更新 dcc.Graph 组件的图表。
  • 在回调函数内部,使用 plotly.express 的 px.histogram 创建一个直方图。
  • 从回调函数返回图表对象 fig,Dash 将使用这个对象更新图表组件。
相关推荐
乐世东方客4 分钟前
Nacos-2.1.0问题-自己记录
开发语言·python
AI技术增长9 分钟前
Pytorch图像去噪实战(二):用UNet解决DnCNN细节丢失问题(结构解析+完整代码+踩坑总结)
人工智能·pytorch·python
dFObBIMmai28 分钟前
CSS如何检测页面浮动元素位置_使用审查工具与clear
jvm·数据库·python
每天吃饭的羊33 分钟前
UMD和IIfe
开发语言·前端·javascript
qq_4609784033 分钟前
实现 Svelte 中基于数组索引的 details 元素单开单关交互
jvm·数据库·python
AI科技星44 分钟前
ELN 升级:π 级数自动生成器全域数理架构
大数据·人工智能·python·算法·金融
gCode Teacher 格码致知1 小时前
Javascript提高:自定义的占位符替换-由Deepseek产生
开发语言·javascript·ecmascript
是个西兰花1 小时前
C++11:智能指针
开发语言·c++·智能指针·rall
用户9352013986791 小时前
淘宝开放平台 item_cat_get 接口详解:获取淘宝商品类目
python
摇滚侠1 小时前
Java 零基础全套视频教程,面向对象(高级),笔记 105-120
java·开发语言·笔记