使用gradio库的Plot模块创建交互式绘图界面

news2024/9/21 16:34:45

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

博主原文链接:https://www.yourmetaverse.cn/nlp/417/

请添加图片描述

(封面图由文心一格生成)

使用gradio库的Plot模块创建交互式绘图界面

在机器学习和数据可视化领域,展示数据和模型的结果通常需要绘制各种图形。gradio库是一个强大的Python库,提供了创建交互式界面的功能,其中的Plot模块可以用于显示各种类型的图表,包括matplotlib、plotly和bokeh等。本文将介绍gradio库的Plot模块以及其change和clear两个方法的使用。

gradio.Plot模块是gradio库中用于显示图表的组件之一。它支持matplotlib、plotly和bokeh等绘图库,可以接受matplotlib.figure.Figure、plotly.graph_objects._figure.Figure或bokeh绘图的字典形式作为输入,并将其显示在界面上。

使用示例:
下面是一个使用gradio.Plot模块创建交互式绘图界面的示例代码:

import altair as alt
import gradio as gr
import numpy as np
import pandas as pd
from vega_datasets import data


def make_plot(plot_type):
    if plot_type == "scatter_plot":
        cars = data.cars()
        return alt.Chart(cars).mark_point().encode(
            x='Horsepower',
            y='Miles_per_Gallon',
            color='Origin',
        )
    elif plot_type == "heatmap":
        # Compute x^2 + y^2 across a 2D grid
        x, y = np.meshgrid(range(-5, 5), range(-5, 5))
        z = x ** 2 + y ** 2

        # Convert this grid to columnar data expected by Altair
        source = pd.DataFrame({'x': x.ravel(),
                            'y': y.ravel(),
                            'z': z.ravel()})
        return alt.Chart(source).mark_rect().encode(
            x='x:O',
            y='y:O',
            color='z:Q'
        )
    elif plot_type == "us_map":
        states = alt.topo_feature(data.us_10m.url, 'states')
        source = data.income.url

        return alt.Chart(source).mark_geoshape().encode(
            shape='geo:G',
            color='pct:Q',
            tooltip=['name:N', 'pct:Q'],
            facet=alt.Facet('group:N', columns=2),
        ).transform_lookup(
            lookup='id',
            from_=alt.LookupData(data=states, key='id'),
            as_='geo'
        ).properties(
            width=300,
            height=175,
        ).project(
            type='albersUsa'
        )
    elif plot_type == "interactive_barplot":
        source = data.movies.url

        pts = alt.selection(type="single", encodings=['x'])

        rect = alt.Chart(data.movies.url).mark_rect().encode(
            alt.X('IMDB_Rating:Q', bin=True),
            alt.Y('Rotten_Tomatoes_Rating:Q', bin=True),
            alt.Color('count()',
                scale=alt.Scale(scheme='greenblue'),
                legend=alt.Legend(title='Total Records')
            )
        )

        circ = rect.mark_point().encode(
            alt.ColorValue('grey'),
            alt.Size('count()',
                legend=alt.Legend(title='Records in Selection')
            )
        ).transform_filter(
            pts
        )

        bar = alt.Chart(source).mark_bar().encode(
            x='Major_Genre:N',
            y='count()',
            color=alt.condition(pts, alt.ColorValue("steelblue"), alt.ColorValue("grey"))
        ).properties(
            width=550,
            height=200
        ).add_selection(pts)

        plot = alt.vconcat(
            rect + circ,
            bar
        ).resolve_legend(
            color="independent",
            size="independent"
        )
        return plot
    elif plot_type == "radial":
        source = pd.DataFrame({"values": [12, 23, 47, 6, 52, 19]})

        base = alt.Chart(source).encode(
            theta=alt.Theta("values:Q", stack=True),
            radius=alt.Radius("values", scale=alt.Scale(type="sqrt", zero=True, rangeMin=20)),
            color="values:N",
        )

        c1 = base.mark_arc(innerRadius=20, stroke="#fff")

        c2 = base.mark_text(radiusOffset=10).encode(text="values:Q")

        return c1 + c2
    elif plot_type == "multiline":
        source = data.stocks()

        highlight = alt.selection(type='single', on='mouseover',
                                fields=['symbol'], nearest=True)

        base = alt.Chart(source).encode(
            x='date:T',
            y='price:Q',
            color='symbol:N'
        )

        points = base.mark_circle().encode(
            opacity=alt.value(0)
        ).add_selection(
            highlight
        ).properties(
            width=600
        )

        lines = base.mark_line().encode(
            size=alt.condition(~highlight, alt.value(1), alt.value(3))
        )

        return points + lines


with gr.Blocks() as demo:
    button = gr.Radio(label="Plot type",
                      choices=['scatter_plot', 'heatmap', 'us_map',
                               'interactive_barplot', "radial", "multiline"], value='scatter_plot')
    plot = gr.Plot(label="Plot")
    button.change(make_plot, inputs=button, outputs=[plot])
    demo.load(make_plot, inputs=[button], outputs=[plot])


if __name__ == "__main__":
    demo.launch()

在上面的示例中,我们定义了一个名为make_plot的函数,根据plot_type参数的不同,生成不同类型的图表。然后,通过gr.Interface创建了一个界面,其中输入使用了Radio组件,用于选择图表类型,输出使用了Plot组件,用于显示生成的图表。最后通过demo.launch()启动了界面。

change方法:
gradio.Plot组件的change方法用于监听组件值的变化,并在变化时执行相应的函数。该方法常用于将组件与其他组件或函数进行关联。在上面的示例中,我们使用了button.change(make_plot, inputs=button, outputs=[plot])语句,将make_plot函数与button组件和plot组件进行了关联。当button组件的值发生变化时,会触发make_plot函数,并更新plot组件的显示内容。

clear方法:
gradio.Plot组件的clear方法用于监听组件的清除操作,当用户点击组件的清除按钮时触发相应的函数。在上面的示例中,我们未使用clear方法,但可以通过定义相应的函数来实现组件清除时的操作。

总结

本文介绍了gradio库的Plot模块及其change和clear两个方法的使用。通过gradio库,我们可以方便地创建交互式绘图界面,并与其他组件或函数进行关联,实现更灵活的数据可视化和模型展示。通过合理利用gradio库的各种功能,我们可以提升数据科学和机器学习任务的可视化效果和用户交互性。

参数详解

下面是关于Plot模块的参数、change方法参数和clear方法参数的整理表格:

参数数据类型默认值描述
valueCallable | None | pd.DataFrameNone默认显示的绘图对象,可以是matplotlib、plotly、altair或bokeh的图形对象,或者是一个可调用函数。如果是可调用函数,在应用加载时会调用该函数来设置组件的初始值。
labelstr | NoneNone在界面中显示的组件名称。
everyfloat | NoneNone如果value是一个可调用函数,在客户端连接打开的情况下,每隔一定时间(以秒为单位)运行该函数。否则没有影响。需要启用队列。可以通过该组件的.load_event属性访问事件(例如取消事件)。
show_labelboolTrue如果为True,将显示标签。
containerboolTrue如果为True,将在容器中放置组件,提供额外的边框填充。
scaleint | NoneNone相对于相邻组件的宽度比例。例如,如果组件A的scale=2,组件B的scale=1,那么A的宽度将是B的两倍。应为整数。
min_widthint160最小像素宽度,如果屏幕空间不足以满足此值,则换行。如果某个比例值导致此组件比min_width更窄,则首先将尊重min_width参数。
visibleboolTrue如果为False,将隐藏组件。
elem_idstr | NoneNone可选的字符串,用作该组件在HTML DOM中的id。可用于针对CSS样式进行定位。
elem_classeslist[str] | str | NoneNone可选的字符串列表,用作该组件在HTML DOM中的类。可用于针对CSS样式进行定位。

change方法参数

参数数据类型默认值描述
fnCallable | Nonerequired包装成界面的函数,通常是一个机器学习模型的预测函数。函数的每个参数对应一个输入组件,函数应返回一个值或值的元组,元组中的每个元素对应一个输出组件。
inputsComponent | list[Component] | set[Component] | NoneNone要用作输入的gradio.components的列表。如果函数不接受任何输入,这应该是一个空列表。
outputsComponent | list[Component] | NoneNone要用作输出的gradio.components的列表。如果函数不返回任何输出,这应该是一个空列表。
api_namestr | NoneNone定义此参数将在api文档中公开端点。
status_trackerNoneNone
scroll_to_outputboolFalse如果为True,将在完成后滚动到输出组件。
show_progressLiteral[‘full’] | Literal[‘minimal’] | Literal[‘hidden’]“full”如果为True,在等待过程中显示进度动画。
queuebool | NoneNone如果为True,将请求放入队列中(如果启用了队列)。如果为False,即使启用了队列,也不会将此事件放入队列中。如果为None,将使用gradio app的队列设置。
batchboolFalse如果为True,则函数应处理一批输入,这意味着它应接受每个参数的输入值列表。列表的长度应相等(最多为max_batch_size)。然后,该函数 必须 返回一个元组列表(即使只有一个输出组件),其中元组中的每个列表对应一个输出组件。
max_batch_sizeint4如果从队列中调用此方法,最多可以批处理的输入数量(仅在batch=True时有效)。
preprocessboolTrue如果为False,在运行’fn’之前不运行组件数据的预处理(例如,如果使用Image组件调用该方法,保留它作为base64字符串)。
postprocessboolTrue如果为False,将在将’fn’的输出返回到浏览器之前不运行组件数据的后处理。
cancelsdict[str, Any] | list[dict[str, Any]] | NoneNone在触发此侦听器时,取消其他事件的列表。例如,设置cancels=[click_event]将取消click_event,其中click_event是另一个组件的.click方法的返回值。尚未运行的函数(或正在迭代的生成器)将被取消,但正在运行的函数将被允许完成。
everyfloat | NoneNone在客户端连接打开的情况下,每隔一定时间(以秒为单位)运行此事件。需要以秒为单位解释。需要启用队列。

clear方法参数

参数数据类型默认值描述
fnCallable | Nonerequired包装成界面的函数,通常是一个机器学习模型的预测函数。函数的每个参数对应一个输入组件,函数应返回一个值或值的元组,元组中的每个元素对应一个输出组件。
inputsComponent | list[Component] | set[Component] | NoneNone要用作输入的gradio.components的列表。如果函数不接受任何输入,这应该是一个空列表。
outputsComponent | list[Component] | NoneNone要用作输出的gradio.components的列表。如果函数不返回任何输出,这应该是一个空列表。
api_namestr | NoneNone定义此参数将在api文档中公开端点。
status_trackerNoneNone
scroll_to_outputboolFalse如果为True,将在完成后滚动到输出组件。
show_progressLiteral[‘full’] | Literal[‘minimal’] | Literal[‘hidden’]“full”如果为True,在等待过程中显示进度动画。
queuebool | NoneNone如果为True,将请求放入队列中(如果启用了队列)。如果为False,即使启用了队列,也不会将此事件放入队列中。如果为None,将使用gradio app的队列设置。
batchboolFalse如果为True,则函数应处理一批输入,这意味着它应接受每个参数的输入值列表。列表的长度应相等(最多为max_batch_size)。然后,该函数 必须 返回一个元组列表(即使只有一个输出组件),其中元组中的每个列表对应一个输出组件。
max_batch_sizeint4如果从队列中调用此方法,最多可以批处理的输入数量(仅在batch=True时有效)。
preprocessboolTrue如果为False,在运行’fn’之前不运行组件数据的预处理(例如,如果使用Image组件调用该方法,保留它作为base64字符串)。
postprocessboolTrue如果为False,将在将’fn’的输出返回到浏览器之前不运行组件数据的后处理。
cancelsdict[str, Any] | list[dict[str, Any]] | NoneNone在触发此侦听器时,取消其他事件的列表。例如,设置cancels=[click_event]将取消click_event,其中click_event是另一个组件的.click方法的返回值。尚未运行的函数(或正在迭代的生成器)将被取消,但正在运行的函数将被允许完成。
everyfloat | NoneNone在客户端连接打开的情况下,每隔一定时间(以秒为单位)运行此事件。需要以秒为单位解释。需要启用队列。

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

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

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

相关文章

Mongodb-5.0.18-zip下载与安装

1.下载地址 Download MongoDB Community Server | MongoDB 2.创建一个文件夹和master.cfg的文件 说明:目的是让mongodb存放数据库的位置在mongodb文件里面。 2.1创建名为mongodb的文件夹 2.2master.cfg 说明:在mongodb5.0.18目录下创建master.cfg。 …

DeepSpeed使用体会

现在的模型越来越大,动辄几B甚至几百B。但是显卡显存大小根本无法支撑训练推理。例如,一块RTX2090的10G显存,光把模型加载上去,就会OOM,更别提后面的训练优化。 作为传统pytorch Dataparallel的一种替代,D…

Spring Cloud Alibaba 之 Nacos精讲

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

ChatGPT炒股:批量自动提取股票公告中的表格并合并数据

首先,在ChatGPT中输入提示词: 写一段Python代码: F盘文件夹“新三板 2023年日常性关联交易20230704”中很多个PDF文件,用 Tabula提取这些PDF文件中第1页中的第2个表格,然后保存到表格文件中,文件标题名和…

选读SQL经典实例笔记03_DML和元数据

1. 复制数据到另一个表 1.1. sql insert into dept_east (deptno,dname,loc)select deptno,dname,locfrom deptwhere loc in ( NEW YORK,BOSTON ) 2. 复制表定义 2.1. 复制表结构,而不复制数据 2.2. MySQL 2.3. PostgreSQL 2.4. Oracle 2.5. sql create ta…

递归--Fibonacci数列 I

描述 众所周知,Fibonacci数列是一个著名数列。它的定义是: 本组题目共有 5 题,请分别用 5 种不同的方式来完成,并比较这些做法的时间。 本题要求采用第一种方法:递归,且不得使用数组记忆结果。 输入描述 …

备忘录方法--Fibonacci数列 IV

描述 众所周知,Fibonacci数列是一个著名数列。它的定义是: 本题要求采用第四种方法:备忘录方法,即记忆化搜索。 具体做法是:用数组把曾经求出来的 Fibonacci 数列保存下来,以后要的时候直接取出来。 输入…

【剑指offer】5.重建二叉树(java)

文章目录 重建二叉树描述示例1示例2示例3思路完整代码 重建二叉树 描述 给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下…

vue+electron项目实战总结(遇到了哪些问题,是如何解决的,哪个阶段需要做什么,附带一些常用方法)

electron作为一个将网页打包成桌面应用的工具 非常强大,在使用electron的时候 要相信 它可以实现所有现代软件能够支撑的功能,下面我总结一下我在 vueelectron经过4次 大版本更新才趋于稳定的开发经验。 一、开发套路: 消息通信数据驱动 使用…

LIN总线与RS485总线

LIN(Local Interconnect Network,局部互连网络)总线和RS485都是用于设备间通信的串行通信协议。下面我将分别列出它们的优势和劣势。 LIN总线的优势: 简单性:LIN总线的硬件和协议简单,易于实现和维护。成…

多元回归预测 | Matlab基于逻辑回归(Logistic Regression)的数据回归预测,多输入单输出模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab基于逻辑回归(Logistic Regression)的数据回归预测,多输入单输出模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清空环境变量…

炸裂了…京东一面索命40问,过了就50W+

说在前面 在40岁老架构师尼恩的(50)读者社区中,经常有小伙伴,需要面试京东、阿里、 百度、头条、美团等大厂。 下面是一个小伙伴成功拿到通过了京东一次技术面试,最终,小伙伴通过后几面技术拷问、灵魂拷问…

MySQL的存储引擎与基本使用

目录 一、前言 1.MySQL的介绍 二、存储引擎 1.什么是存储引擎 2.常见存储引擎 2.1.InnoDB(MySQL默认引擎) 2.1.1.四种隔离级别 2.2.MyISAM存储引擎 2.3.Memory存储引擎 3.ACID事务 三、CRUD操作 1.插入数据 2.查询数据 3.修改数据 4.删除数据 四、数据库 1.默认…

C#学习之路-基本语法

C# 是一种面向对象的编程语言。在面向对象的程序设计方法中,程序由各种相互交互的对象组成。相同种类的对象通常具有相同的类型,或者说,是在相同的 class 中。 using System; using System.Collections.Generic; using System.Linq; using S…

OpenCV库进行图像旋转、仿射变换和透视变换

#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp>

解决Linux操作系统ping不同www.baidu.com问题

首先给自己管理员权限 输入代码 su然后输入密码密码不会显示打完直接回车 输入下面代码配置网络 cd /etc/sysconfig/network-scripts 输入以下代码进入ens33管理 vim ifcfg-ens33 输入 i i用方向键把光标移到 ONBOOT NO 把 no 改为 yes 按下 ESC 退出编辑模式 直接敲…

二叉树前中后序的非递归实现

前言 &#xff1a; 递归我们会有一些问题的 为什么有递归就一定有非递归呢&#xff1f;&#xff1f;首先递归是有一定缺陷的 递归真正的缺陷是&#xff0c;每一个程序运行起来呢都是一个线程的形式&#xff0c;但是每一个线程都会有独立的栈空间&#xff0c;但是栈空间是很…

Spring Boot 中的 Future 接口是什么,如何使用

Spring Boot 中的 Future 接口是什么&#xff0c;如何使用 在异步编程中&#xff0c;我们通常需要处理一些耗时的操作。一种常见的做法是使用 Future 接口来代表一个异步操作的结果。在 Spring Boot 中&#xff0c;Future 接口被广泛应用于异步编程中&#xff0c;本文将介绍 S…

【C++】VSCode 使用 C/C++ Compile Run 插件时,设置默认运行的编译参数的方法

为什么要设置参数 最近在学习C&#xff0c;在学习多线程的时候&#xff0c;发现使用C11中的thread类写的代码编译会报错&#xff1a; * 正在执行任务: g -Wall -Wextra -g3 /Users/anweiyang/studySrc/C/ThreadTest.cpp -o /Users/anweiyang/studySrc/C/output/ThreadTest /U…

OpenCV使用putText将文字绘制到图像上

#include <opencv2/opencv.hpp>int main(int argc, char **argv) {cv::Mat image = cv::imread(