Dash中的callback的使用 多input 6

代码说明

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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于react

1.快速搭建开发环境 2.react渲染流程 3.1 jsx基础 概念 3.2 jsx基础 本质 3.3 jsx基础 jsx表达式 3.4 jsx基础 实现列表渲染 3.5 jsx基础 实现条件渲染 3.5 jsx基础 实现复杂的条件渲染 4. react中事件绑定 5.react组建基础使用 6.1 useState 6.2 useState修改状态的规则 7.基础…

Android 11.0 系统默认打开OEM解锁开关功能实现

1.前言 在11.0的系统rom定制化开发中,在9.0系统以后为了设备的安装,系统开始启用oem机制,所以在adb push文件就需要先oem解锁,然后才可以 进行相关操作,所以就需要默认打开oem解锁的开关,来方便oem解锁功能的实现 如图: 2.系统默认打开OEM解锁开关功能实现的核心类 pac…

《Git快速入门》Git分支

1.master、origin、origin/master 区别 首先搞懂git分支的一些名称区别: master : Git 的默认分支名字。它并不是一个特殊分支、跟其它分支完全没有区别。 之所以几乎每一个仓库都有 master 分支,是因为 git init 命令默认创建它&#xff0c…

web功能实例 - Canvas裁剪工具

嗯,手撸官方文档2天,发现没啥用,尤其是动画,那种计算出来的,根本想不到。因此学着学了抱着要做个东西的想法,去网上找相关案例,最终做出了这个裁剪工具。 PS :先说一下思路: 核心实现有3个canvas图层, 其中一个负责图片的预览。另外2个叠加到…

\r\n和缓冲区/进度条小程序

一 前置知识 带有\n就会立马刷新缓冲区,\r不会刷新缓冲区 刷新的2个场景: 1 ~fflush 缓冲区中存在\r或\n --> \r fflush --> 不换行的\n) 2 ~ 文件关闭自动刷新缓冲区 倒计时小程序0-9 倒计时小程序0-99

信号与线性系统翻转课堂笔记11——连续LTI系统频域分析

信号与线性系统翻转课堂笔记11——连续LTI系统频域分析 The Flipped Classroom11 of Signals and Linear Systems 对应教材:《信号与线性系统分析(第五版)》高等教育出版社,吴大正著 一、要点 (1,重点&…

Java基础知识复习

目录 一、Java语言基础知识,包括面向对象编程、语法特性等 0、什么是面向对象编程? 1、基本语法: 2、变量和数据类型: 3、运算符和表达式: 4、控制结构: 5、函数和方法: 6、类和对象&#xff1a…

因吹斯汀!只需上传照片,GPT-4V精准识别食物的卡路里和摄入热量

健身和减肥的朋友有福啦! 最近一篇文章探索了GPT-4V在膳食评估领域的强大能力,可以根据饮食图片精准判断食物的种类与重量,并给出营养成分的分析,包括碳水化合物、蛋白质、脂肪占比。 最最重要的是,它还能告诉我们这…

算法与数据结构--二叉搜索树与自平衡二叉搜索树

0.字典(即c的map) 注:字典的 "member运算" 指的是检查字典中是否存在某个特定的键的操作,即查询操作。 如果我们使用数组来实现字典/map,虽然使用二分法查询也可以达到logn,但是的话插入和删除太…

GPT每预测一个token就要调用一次模型

问题:下图调用了多少次模型? 不久以前我以为是调用一次 通过看代码是输出多少个token就调用多少次,如图所示: 我理解为分类模型 预测下一个token可以理解为分类模型,类别是vocab的所有token,每一次调用都…

Description:An attempt was made to call a method that does not exist.

错误信息 Description: An attempt was made to call a method that does not exist. The attempt was made from the following location: okio.Segment.writeTo(Segment.kt:169) The following method did not exist: kotlin.collections.ArraysKt.copyInto([B[BIII)[B T…

多行文本(多行字符串)中,如果每行文本前都有空格,各行文本前空格数最小为n,则删除每行文本前的n个空格。textwrap.dedent(多行字符串)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 多行文本(多行字符串)中, 如果每行文本前都有空格, 各行文本前空格数最小为n, 则删除每行文本前的n个空格。 textwrap.dedent(多行字符串) 请问以下代…

ES的安装和RestClient的操作

目录 初识elasticsearch 什么是elasticsearch elasticsearch的发展 Lucene的优缺点 elasticsearch的优势 倒排索引 es与mysql的概念对比 文档 索引 概念对比 架构 安装es 安装kibana 安装ik分词器 分词器 安装ik分词器 ik分词器的拓展和停用词典 操作索引库…

c语言中数据结构

一、结构体的由来 1. 数据类型的不足 C语言中,基本数据类型只有整型、字符型、浮点型等少数几种,无法满足复杂数据类型的需要。 2. 数组的限制 虽然数组可以存储多个同类型的数据,但是数组中的元素个数是固定的,无法动态地改变…

Unity VR Pico apk安装失败:INSTALL_FAILED_UPDATE_INCOMPATIBLE

我的报错: PICO4企业版。安装apk,报错“安装失败。(所属的Unity项目打包的apk,被我在同一台pico4安装了20次) 调试方法: PIco4发布使用UNITY开发的Vr应用,格式为apk,安装的时候发生…

SQL手工注入漏洞测试(MySQL数据库)

一、实验平台 https://www.mozhe.cn/bug/detail/elRHc1BCd2VIckQxbjduMG9BVCtkZz09bW96aGUmozhe 二、实验目标 获取到网站的KEY,并提交完成靶场。 三、实验步骤 ①、启动靶机,进行访问查找可能存在注入的页面 ②、通过测试判断注入点的位置(id) (1)…

嵌入式-stm32-用PWM点亮LED实现呼吸灯

一:知识前置 1.1、LED灯怎么才能亮? 答:LED需要低电平才能亮,高电平是灯灭。 1.2、LED灯为什么可以越来越亮,越来越暗? 答:这是用到不同占空比来实现的,控制LED实现呼吸灯&…

matlab时间转换

采集的GNSS数据是10hz的。 data(选取其中一部分)如下: (1)char类型 formatOut yyyy-mm-dd HH:MM:SS; str datestr(data,formatOut); str如下: (2)double类型 DateVector dat…

STM32独立看门狗

时钟频率 40KHZ 看门狗简介 STM32F10xxx 内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看 门狗设备 ( 独立看门狗和窗口看门狗 ) 可用来检测和解决由软件错误引起的故障;当计数器达到给 定的超时值时,触发一个中…

WU反走样算法

WU反走样算法 由离散量表示连续量而引起的失真称为走样,用于减轻走样现象的技术成为反走样,游戏中称为抗锯齿。走样是连续图形离散为想想点后引起的失真,真实像素面积不为 零。走样是光栅扫描显示器的一种固有现象,只能减轻&…