Dash中的callback的使用 多input 6

news2025/2/7 8:42:38

代码说明

import plotly.express as px

mport plotly.express as px用于导入plotly.express模块并给它起一个别名px。这样在后续的代码中,你可以使用px来代替plotly.express,使代码更加简洁。

plotly.express是Plotly的一个子模块,用于快速创建交互式的、数据驱动的图表。通过使用px,你可以很方便地创建各种类型的图表,如散点图、柱状图、箱形图等。

代码:

# 导入Dash库,Dash是一个用于创建数据驱动的Web应用的Python框架。  
from dash import Dash, dcc, html, Input, Output, callback  
  
# 导入plotly.express库,这是一个用于快速创建数据可视化图表的库。  
import plotly.express as px  
  
# 导入pandas库,用于数据处理和分析。  
import pandas as pd  
  
# 从网络上读取一个CSV文件到DataFrame中。这个CSV文件包含了gapminder项目中的一些全球数据。  
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv')  
  
# 创建一个Dash应用实例。  
app = Dash(__name__)  
  
# 定义应用的布局,包括一个Graph和一个Slider。  
app.layout = html.Div([  
    dcc.Graph(id='graph-with-slider'),  # 创建一个图形元素,其id为'graph-with-slider'。  
    dcc.Slider(  # 创建一个滑块元素。  
        df['year'].min(),  # 设置滑块的最小值为数据中'year'列的最小值。  
        df['year'].max(),  # 设置滑块的最大值为数据中'year'列的最大值。  
        step=None,  # 设置滑块的步长为无,这意味着滑块可以覆盖整个范围。  
        value=df['year'].min(),  # 设置滑块的初始值为数据中'year'列的最小值。  
        marks={str(year): str(year) for year in df['year'].unique()},  # 为滑块添加标记,标记的值为数据中'year'列的所有唯一值。  
        id='year-slider'  # 设置滑块的id为'year-slider'。  
    )  
])  
  
# 定义一个回调函数,该函数根据滑块的值更新图形。  
@callback(  # 定义一个回调函数,它接受一个输入(滑块的当前值)并产生一个输出(更新的图形)。  
    Output('graph-with-slider', 'figure'),  # 设置输出的id为'graph-with-slider'的图形的figure属性。  
    Input('year-slider', 'value'))  # 设置输入为id为'year-slider'的滑块的value属性。  
def update_figure(selected_year):  # 定义回调函数,它接受滑块的当前值作为参数。  
    filtered_df = df[df.year == selected_year]  # 根据滑块的当前值筛选数据。  
  
    # 使用plotly.express创建散点图,其中x轴是每个国家的GDP per capita,y轴是人均寿命,点的大小表示人口,颜色表示国家所在的洲。  
    fig = px.scatter(filtered_df, x="gdpPercap", y="lifeExp", size="pop", color="continent", hover_name="country", log_x=True, size_max=55)  
  
    fig.update_layout(transition_duration=500)  # 更新布局以添加过渡效果,持续时间为500毫秒。  
  
    return fig  # 返回更新的图形。  
  
# 如果这个脚本是作为主程序运行,则启动Dash应用。  
if __name__ == '__main__':    
    app.run(debug=True)  # 启动应用并启用调试模式。

在这里插入图片描述

多input

在这里插入图片描述

# 导入Dash库及其相关组件。Dash是一个用于构建分析性web应用的Python框架,
# dcc是Dash的核心组件库,html是Dash的HTML组件库。
# Input, Output, callback用于设置和处理Dash应用的交互功能。
from dash import Dash, dcc, html, Input, Output, callback
# 导入plotly.express库,并简称为px。Plotly.express是一个用于快速创建交互式图表的库。
import plotly.express as px

# 导入pandas库,并简称为pd。Pandas是一个用于数据处理和分析的Python库。
import pandas as pd

# 创建一个Dash应用实例
app = Dash(__name__)

# 从指定的URL读取数据,并使用pandas的read_csv函数将其加载为一个DataFrame。
# 这个数据集包含了各种国家指标的数据。
df = pd.read_csv('https://plotly.github.io/datasets/country_indicators.csv')

# 设置Dash应用的布局。这个布局是一个HTML的Div元素,其中包含了多个子元素。
app.layout = html.Div([
    # 第一行:包含两个下拉框和两个单选按钮的Div元素,用于选择x轴和y轴的指标以及轴的类型(线性或对数)
    html.Div([
        html.Div([
            dcc.Dropdown(  # x轴指标下拉框
                df['Indicator Name'].unique(),  # 下拉框的选项,从数据集中获取不重复的指标名称
                'Fertility rate, total (births per woman)',  # 默认选择的指标
                id='xaxis-column'  # 下拉框的id,用于在回调函数中识别这个组件
            ),
            dcc.RadioItems(  # x轴类型单选按钮
                ['Linear', 'Log'],  # 单选按钮的选项
                'Linear',  # 默认选择的选项
                id='xaxis-type',  # 单选按钮的id
                inline=True  # 单选按钮在一行内显示
            )
        ], style={'width': '48%', 'display': 'inline-block'}),  # 设置这个Div的样式,宽度为48%,行内显示

        html.Div([  # y轴的设置与x轴类似,只是id和默认选项不同
            dcc.Dropdown(
                df['Indicator Name'].unique(),
                'Life expectancy at birth, total (years)',
                id='yaxis-column'
            ),
            dcc.RadioItems(
                ['Linear', 'Log'],
                'Linear',
                id='yaxis-type',
                inline=True
            )
        ], style={'width': '48%', 'float': 'right', 'display': 'inline-block'})  # 这个Div浮动到右边,也是行内显示
    ]),

    # 用于显示图表的Graph组件,id为'indicator-graphic',在回调函数中通过这个id来更新图表。
    dcc.Graph(id='indicator-graphic'),

    # 一个滑动条,用于选择年份。滑动条的最小值、最大值和步长分别从数据集中获取。
    dcc.Slider(
        df['Year'].min(),  # 滑动条的最小值
        df['Year'].max(),  # 滑动条的最大值
        step=None,  # 滑动条的步长,None表示自动计算一个合适的步长
        id='year--slider',  # 滑动条的id
        value=df['Year'].max(),  # 滑动条的默认值,设置为最大年份
        marks={str(year): str(year) for year in df['Year'].unique()},  # 滑动条上的标记,显示所有不重复的年份
    )
])


# 定义一个回调函数,用于更新图表。当任何一个输入组件的值改变时,这个函数都会被调用。
@callback(
    Output('indicator-graphic', 'figure'),  # 输出组件及其属性,这里是图表的figure属性。
    # 输入组件及其属性,包括x轴和y轴指标下拉框的值、x轴和y轴类型单选按钮的值、以及滑动条的值。
    Input('xaxis-column', 'value'),
    Input('yaxis-column', 'value'),
    Input('xaxis-type', 'value'),
    Input('yaxis-type', 'value'),
    Input('year--slider', 'value'))  # 注意这里每个输入组件的id与前面定义的对应组件的id相同。
def update_graph(xaxis_column_name, yaxis_column_name, xaxis_type, yaxis_type, year_value):  # 回调函数的参数与输入组件的属性对应。
    # 根据选择的年份筛选数据。这里假设数据集中有一个'Year'列,用于记录每个数据的年份。
    dff = df[df['Year'] == year_value]
    # 根据筛选后的数据创建一个散点图。x轴和y轴的数据分别根据选择的x轴和y轴指标从数据集中获取。hover_name设置了鼠标悬停在点上时显示的信息。
    fig = px.scatter(x=dff[dff['Indicator Name'] == xaxis_column_name]['Value'],
                     y=dff[dff['Indicator Name'] == yaxis_column_name]['Value'],
                     hover_name=dff[dff['Indicator Name'] == yaxis_column_name]['Country Name'])
    # 更新图表的布局设置,包括边距和悬停模式等。margin设置了图表的边距;hovermode设置了鼠标悬停在图表上时的行为,这里是显示离鼠标最近的点。
    fig.update_layout(margin={'l': 40, 'b': 40, 't': 10, 'r': 0}, hovermode='closest')
    # 更新x轴的设置,包括标题和类型等。title设置了x轴的标题;type设置了x轴的类型,根据用户的选择在'linear'和'log'之间切换。注意这里使用了Python的三元表达式来简化代码。
    fig.update_xaxes(title=xaxis_column_name, type='linear' if xaxis_type == 'Linear' else 'log')
    # 更新y轴的设置,与x轴类似。注意这里y轴的标题和类型都是根据用户的选择动态设置的。
    fig.update_yaxes(title=yaxis_column_name, type='linear' if yaxis_type == 'Linear' else 'log')
    # 返回更新后的图表对象,Dash会自动将这个对象渲染到页面上对应的Graph组件中。这样用户就可以看到最新的图表了。这里利用了Python的函数返回值来实现这种自动更新的功能。
    return fig

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1336464.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT foreach

原型:foreach(variable, container) container:容器,即被遍历的对象 variable:当前元素,即遍历container过程中,当前的那个元素 代码: QStringList container { "1", "2&quo…

CRM管理系统是怎样分析客户行为的?CRM客户管理功能解析

轻霜冻死单根草,狂风难毁万亩林。拥有坚实客户基础的企业即使面对日趋白热的市场竞争也依然能够勇立潮头。CRM管理系统是维系客户的重要工具之一。CRM管理系统是怎样辅助企业实现客户管理的?我们可以拆解为以下几个方面:1.客户信息管理 2.数据…

使用防火墙是否可以应对DDoS攻击?

很多游戏行业公司对网络安全不够了解,觉得装个防火墙就可以万事大吉了。实际上使用防火墙确实是解决DDoS攻击问题的一种有效方法,一些更先进的防火墙还可以采用其他防御措施,例如:深度包检测、行为分析、人工智能等,来识别和防御各…

AGV|RGV小车RFID传感器CNS-RFID-01/1S的RS232通讯联机方法

CNS-RFID-01/1S广泛应用于AGV小车,搬运机器人,无人叉车等领域,用于定位,驻车等应用,可通过多种通讯方式进行读写操作,支持上位机控制,支持伺服电机,PLC等控制设备联机,本…

使用web_video_server进行网页段的视频传输

引言:在项目中,需要实现无人机摄像头采集到的图像回传到window下进行查看,为此,选择使用web_video_server功能包实现局域网下的图像传输 硬件环境: 硬件:Jetson orin nano 8G D435摄像头 环境&#xff…

智能优化算法应用:基于浣熊算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于浣熊算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于浣熊算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.浣熊算法4.实验参数设定5.算法结果6.参考文献7.MA…

【MySQL】数据库规范化的三大法则 — 一探范式设计原则

🍎个人博客:个人主页 🏆个人专栏: 数 据 库 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 1. 第一范式(1NF): 2. 第二范式(2NF): 3. 第三范式…

无需创建 Controller Action 直接返回View (个人不建议采用)

演示如何不写controller 方法,而直接返回View。这里通过使用HandleUnknownAction 方法来自动处理对一个controller 的每个没有对应方法的请求。 Controller 类包含一个HandleUnknownAction()方法,它在你试图去调用一个不存在的action 时被执行。如果每个…

面向对象练习-剪刀石头布游戏

需求:剪刀石头布游戏判断 类的关系: 运行效果: 思路步骤: 几个事物?——》几个类 人,电脑,游戏 定义类 Player 属性: 手势 方法 出手势,用户自己出 AIPlayer 属性和Pl…

<script setup> 的作用

一、使用<script setup> 之后&#xff0c;就不需要手动写以下代码&#xff0c;只要写逻辑代码 未加setup&#xff0c;vite 工程要加上下面代码 *export default{ * setup(){ * //只要写逻辑代码 * return{***} * } * } 加了setup &#xff0c;export default 、…

希尔排序详解(C语言)

前言 希尔排序是一种基于插入排序的快速排序算法。所以如果还会插入排序的小伙伴可以点击链接学习一下插入排序&#xff08;点我点我&#xff01;&#xff09; &#xff0c;相较于插入排序&#xff0c;希尔排序拥有更高的效率&#xff0c;小伙伴们肯定已经迫不及待学习了吧&…

如何进行安全管理

目录 安全管理 修改ECS实例登录密码 方式一&#xff1a;重置ECS实例密码 方式二&#xff1a;在实例内部修改登录密码 安全组 ECS实例加入安全组的规则 使用安全组 补丁管理 安全管理 如果希望保护网站安全&#xff0c;首先就要保护ECS实例安全&#xff0c;这需要对ECS实…

Transfer Learning(迁移学习)

1. 什么是迁移学习 迁移学习(Transfer Learning)是一种机器学习方法&#xff0c;就是把为任务 A 开发的模型作为初始点&#xff0c;重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务&#xff0c;虽然大多数机器学习算法都…

学生护眼台灯几瓦最好?备考好用护眼台灯推荐

网上有大量关于护眼台灯的话题讨论&#xff0c;像“护眼台灯是智商税”、“台灯伤眼”等话题更是激起了众多用户的热烈讨论。护眼台灯本身是业内公认对眼睛友好的工具&#xff0c;但如今却饱受争议&#xff0c;这和各类不专业护眼台灯脱不开关系&#xff01;因为这类产品不仅选…

十大VSCODE 插件推荐2023

1、海鲸AI 插件链接&#xff1a;ChatGPT GPT-4 - 海鲸AI - Visual Studio Marketplace 包含了ChatGPT(3.5/4.0)等多个AI模型。可以实现代码优化&#xff0c;代码解读&#xff0c;代码bug修复等功能&#xff0c;反应迅捷&#xff0c;体验出色&#xff0c;是一个多功能的AI插件…

Sql 动态行转列

SELECT ID, Name, [Month],auth FROM [Test].[dbo].[Test3] 数据列表&#xff1a; 1.静态行专列 Select auth, MAX( CASE WHEN [Month] 一月 then Name else null end) 一月, MAX( CASE WHEN [Month] 二月 then Name else null end) 二月, MAX…

半导体行业存储高纯酸大规格容器PFA酸缸20L

一、产品介绍 PFA清洗槽是即四氟清洗桶后的升级款&#xff0c;专为半导体光伏光电等行业设计的&#xff0c;一体成型&#xff0c;无需担心漏液。主要用于浸泡、清洗带芯片硅片电池片的花篮。由于PFA的特点它能耐受清洗溶液的腐蚀性&#xff0c;同时金属元素值低&#xff0c;无溶…

HTML代码全解析

HTML代码全解析实例解析 <!DOCTYPE html> 声明为 HTML5 文档<html> 元素是 HTML 页面的根元素<head> 元素包含了文档的元&#xff08;meta&#xff09;数据&#xff0c;如 <meta charset"utf-8"> 定义网页编码格式为 utf-8。<title> 元…

springCould中的Ribbon-从小白开始【5】

目录 1.什么是Ribbo❤️❤️❤️ 2.eureka自带Ribbon ❤️❤️❤️ 3. RestTemplate❤️❤️❤️ 4.IRule❤️❤️❤️ 5.负载均衡算法❤️❤️❤️ 1.什么是Ribbo 1.Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端,负载均衡的工具。2.主要功能是提供客户端的软件…

Opencv_CUDA实现推理图像前处理与后处理

Opencv_CUDA实现推理图像前处理与后处理 通过trt 或者 openvino部署深度学习算法时&#xff0c;往往会通过opencv的Mat及算法将图像转换为固定的格式作为输入openvino图像的前后处理后边将在单独的文章中写出今晚空闲搜了一些opencv_cuda的使用方法&#xff0c;在此总结一下前…