当前位置: 首页 > news >正文

用R语言运用 Shiny 包打造基于鸢尾花数据集的交互式数据可视化应用

   下面内容摘录自《R 语言与数据科学的终极指南》专栏文章的部分内容,每篇文章都在 5000 字以上,质量平均分高达 94 分,看全文请点击下面链接

1章4节:数据可视化, R 语言的静态绘图和 Shiny 的交互可视化演示(更新2024/08/14)-CSDN博客文章浏览阅读14次。使用R语言,数据科学家和分析师不仅可以快速创建原型,还可以开发全功能的应用程序,供同事、客户或公众使用。这种能力为数据分析和可视化带来了全新的可能性。https://blog.csdn.net/2301_79425796/article/details/141187347​​​​​​​欢迎订阅我们专栏

在数据科学中,数据的探索和可视化是分析的重要组成部分。R 语言提供了强大的工具来进行数据分析和可视化,其中 Shiny 包允许我们构建交互式的 Web 应用,使用户可以动态地探索数据。本文将详细介绍如何使用 Shiny 构建一个交互式的散点图应用,该应用允许用户选择鸢尾花数据集的不同变量进行可视化,并通过多种选项自定义图形。

1、准备工作

在开始之前,请确保你已经安装了以下 R 包:

  • shiny: 用于构建交互式 Web 应用的核心包。
  • bslib: 提供主题支持,允许我们定制 Shiny 应用的外观。
  • dplyr: 一个用于数据操作的 R 包,使数据过滤和选择更加简洁和高效。
  • ggplot2: R 中最流行的数据可视化包,用于创建优美且灵活的图形。
  • ggExtra: 用于在 ggplot2 图形上添加额外信息,如边际图。

可以通过运行以下命令来安装这些包:

install.packages(c("shiny", "bslib", "dplyr", "ggplot2", "ggExtra"))

2、鸢尾花数据集

鸢尾花数据集(iris)是数据科学中常用的经典数据集之一。该数据集包含 150 条记录,每条记录代表一朵鸢尾花的测量数据。数据集包括四个数值变量(萼片长度、萼片宽度、花瓣长度和花瓣宽度)和一个分类变量(物种)。

3、构建 Shiny 应用

我们将分两个部分来构建这个应用:用户界面(UI)和服务器端逻辑(Server)。用户界面定义了应用的外观及交互元素,而服务器端逻辑则处理用户的输入并生成相应的输出。

加载展包和筛选数值型列
# 加载必要的R包
library(shiny)   # 用于构建交互式Web应用
library(bslib)   # 用于主题定制的包
library(dplyr)   # 数据操作包
library(ggplot2) # 数据可视化包
library(ggExtra) # 用于在ggplot2图形中添加边际图的包# 加载鸢尾花数据集
df <- iris# 筛选出适合散点图的数值型列
df_num <- df |> select(where(is.numeric))

例如,如果鸢尾花数据集中包含列 Sepal.LengthSepal.WidthPetal.LengthPetal.Width 和 Species,其中前四列是数值型,那么 df_num 将只包含前四列。

定义用户界面

在 Shiny 应用中,用户界面(UI)定义了应用的布局和用户交互组件。我们将使用 page_sidebar 函数来创建一个带有侧边栏的页面布局。

# 定义用户界面
ui <- page_sidebar(sidebar = sidebar(# 下拉菜单让用户选择X轴变量varSelectInput("xvar", "X 变量", df_num, selected = "Sepal.Length"),# 下拉菜单让用户选择Y轴变量varSelectInput("yvar", "Y 变量", df_num, selected = "Sepal.Width"),# 复选框组允许用户根据物种进行筛选checkboxGroupInput("species", "按物种筛选",choices = unique(df$Species), selected = unique(df$Species)),hr(), # 添加水平分隔线# 复选框允许用户选择是否按物种显示checkboxInput("by_species", "显示物种", TRUE),# 复选框允许用户选择是否显示边际图checkboxInput("show_margins", "显示边际图", TRUE),# 复选框允许用户选择是否添加平滑曲线checkboxInput("smooth", "添加平滑曲线")),# 输出散点图plotOutput("scatter")
)
  • varSelectInput: 允许用户从鸢尾花数据集的数值变量中选择 X 轴和 Y 轴的变量。
  • checkboxGroupInput: 允许用户根据物种筛选数据。
  • hr: 插入一条水平分隔线,以分隔不同的输入控件。
  • checkboxInput: 复选框,用于控制是否显示物种、是否添加边际图,以及是否在散点图中添加平滑曲线。
  • plotOutput: 用于在页面上展示由 ggplot2 生成的图形。
 定义服务器端逻辑

定义服务器端逻辑指的是明确和编写在服务器端运行的一系列规则、流程和操作,以处理来自客户端(如网页浏览器或移动应用)的请求,并根据这些请求执行相应的任务。服务器端逻辑涵盖了广泛的功能,例如接收和解析客户端发送的数据,与数据库进行交互以读取或写入信息,执行复杂的计算和数据处理操作,根据特定条件做出决策,生成动态的内容并将其返回给客户端,以及处理用户认证、授权和安全性等方面的任务。

举个例子,当用户在购物网站上提交订单时,服务器端逻辑会验证订单信息的完整性和准确性,检查库存数量,计算总价,将订单数据保存到数据库中,并最终向用户返回确认消息。又比如,在社交媒体平台上,服务器端逻辑会决定哪些内容应该显示在用户的动态页面上,基于用户的关注列表、发布时间和内容相关性等因素进行筛选和排序。

# 定义服务器端逻辑
server <- function(input, output, session) {# 根据用户选择的物种筛选数据subsetted <- reactive({req(input$species) # 确保选择了物种df |> filter(Species %in% input$species) # 筛选数据})# 生成散点图output$scatter <- renderPlot({p <- ggplot(subsetted(), aes(!!input$xvar, !!input$yvar)) + list(theme(legend.position = "bottom"), # 设置图例位置if (input$by_species) aes(color = Species), # 如果选择按物种显示,按颜色区分物种geom_point(), # 绘制散点if (input$smooth) geom_smooth() # 如果选择平滑曲线,添加平滑线)# 如果选择显示边际图,添加边际图if (input$show_margins) {margin_type <- if (input$by_species) "density" else "histogram"p <- ggExtra::ggMarginal(p, type = margin_type, margins = "both",size = 8, groupColour = input$by_species, groupFill = input$by_species)}p # 返回生成的图形}, res = 100) # 设置图形分辨率
}
  • subsetted: 使用 reactive 函数来创建一个反应式表达式,它根据用户选择的物种过滤数据集。
  • req 函数确保在没有选择物种时应用不会出错。
  • renderPlot: 根据用户的输入动态生成图形。
  • ggplot 函数用于创建基本的散点图,aes 函数定义了 X 轴和 Y 轴的变量。
  • ggExtra::ggMarginal: 如果用户选择了显示边际图,ggMarginal 函数会在散点图的边缘添加密度图或直方图。
3. 启动 Shiny 应用
shinyApp(ui, server)

这段代码将 UI 和服务器逻辑组合在一起,并启动 Shiny 应用。运行此应用后,用户可以选择不同的 X 轴和 Y 轴变量,筛选特定物种,并通过复选框控制是否显示物种、添加边际图或平滑曲线。

应用演示与扩展

在完成基础的 Shiny 应用之后,能够依据实际的需求来展开更进一步的拓展。比如说,您能够增添数据导入的功能,赋予用户上传自身数据集的权限,并对其展开可视化的分析;还能够丰富图表的类型,除了常见的散点图之外,添加诸如箱线图、柱状图等其他类型的图表;此外,借助 bslib 包,您能够为应用程序设定专属的自定义主题,从而使之与特定的品牌风格或者审美偏好相契合。

本文详细介绍了如何使用 Shiny 构建一个交互式的散点图应用,并提供了通过鸢尾花数据集进行数据可视化的示例。通过 Shiny 的强大功能,我们可以轻松地将静态的数据分析转变为动态、互动的 Web 应用,从而使数据分析过程更加直观和用户友好。所以,使用 Shiny,数据科学家和分析师不仅可以快速创建原型,还可以开发全功能的应用程序,供同事、客户或公众使用。这种能力使得 Shiny 成为 R 生态系统中不可或缺的一部分,为数据分析和可视化带来了全新的可能性。

    .........

欢迎订阅我们专栏,深度系统地学习R语言。 

为帮助大家更出色地掌握临床统计、数据挖掘以及人工智能建模的入门知识和应用,由于众多同学在计算机编程上经验欠缺,特此开设《R 语言与数据科学的终极指南》专栏。该专栏每周至少会定期更新三篇,直到整个专栏更新完成。每篇文章都在 5000 字以上,质量平均分高达 94 分。要提醒大家的是,每结束一个章节,专栏的优惠力度就会减小,当下正是订阅的最佳优惠时段,诚邀各位积极订阅!

专栏《R 语言与数据科学的终极指南》链接:https://blog.csdn.net/2301_79425796/category_12729892.html?spm=1001.2014.3001.5482

相关文章:

用R语言运用 Shiny 包打造基于鸢尾花数据集的交互式数据可视化应用

下面内容摘录自《R 语言与数据科学的终极指南》专栏文章的部分内容&#xff0c;每篇文章都在 5000 字以上&#xff0c;质量平均分高达 94 分&#xff0c;看全文请点击下面链接&#xff1a; 1章4节&#xff1a;数据可视化&#xff0c; R 语言的静态绘图和 Shiny 的交互可视化演…...

Upload-Lab第3关:如何巧妙应对黑名单文件后缀检测?

关卡介绍 在Pass03中,我们面临的挑战是绕过文件上传功能的黑名单检测机制。黑名单检测是一种常见的安全措施,它通过检查上传文件的后缀来阻止特定类型的文件(如 .php, .exe)被上传。在这一关,我们需要找到一种方法,上传一个可以执行的恶意文件,同时绕过黑名单检测。 …...

SSLVPN对比IPSECVPN安全设备的起源、发展、以及目前行业使用场景

前言 SSL VPN&#xff08;Secure Sockets Layer Virtual Private Network&#xff09;是一种利用SSL/TLS&#xff08;Transport Layer Security&#xff0c;传输层安全&#xff09;协议来创建安全连接的技术&#xff0c;它允许远程用户通过公共网络&#xff08;通常是互联网&am…...

Hadoop大数据集群搭建

一、虚拟机配置网络 1、配置文件 进入“/etc/sysconfig/network-scripts”目录&#xff0c;查看当前目录下的“ifcfg-ens33”文件 对“ens33”文件进行配置 2、重启网络 systemctl restart network 3、测试网络 Ping www.baidu.com 4、设置虚拟机主机名称 5、绑定主机名和…...

【技术前沿】MetaGPT入门安装部署——用多个大语言模型解决任务!一键安装,只需填写OpenAI API

项目简介 MetaGPT 是一个多智能体框架&#xff0c;旨在构建全球首家 “AI 软件公司”。该项目通过为 GPT 分配不同的角色&#xff0c;模拟产品经理、架构师、工程师等职业&#xff0c;协同完成复杂的软件开发任务。MetaGPT 将一个简单的需求转化为完整的软件开发流程&#xff…...

#compsoer基本使用01#

Composer 是 PHP 的依赖管理工具&#xff0c;它允许开发人员管理和安装项目所需的依赖包。 1:查看Compsoer的全局配置命令 composer config -g --list --verbose 这个可以查看composer的镜像地址。例如 [repositories.packagist.org] type (string) : composer [repositor…...

基于c++的yolov5推理之前处理详解及代码(一)

目录 一、前言&#xff1a; 二、关于环境安装&#xff1a; 三、首先记录下自己的几个问题 问题&#xff1a;c部署和python部署的区别&#xff1f; 四、正文开始 4.1 图像预处理讲解 1、BGR---->RBG 2、等比例放缩图片&#xff08;涉及到短边的填充&#xff09; 3、归一化…...

Oracle(55)什么是并行查询(Parallel Query)?

并行查询&#xff08;Parallel Query&#xff09;是数据库管理系统中的一种查询优化技术&#xff0c;它允许数据库引擎同时使用多个处理器或线程来执行查询操作。通过将查询任务分解为多个子任务&#xff0c;并在多个处理器上同时执行这些子任务&#xff0c;可以显著提高查询的…...

关于 Lora中 Chirp Spread Spectrum(CSS)调制解调、发射接收以及同步估计的分析

本文结合相关论文对CSS信号的数学形式、调制解调、发射接收以及同步估计做了全面分析&#xff0c;希望有助于更好地理解lora信号 long-range (LoRa) modulation, also known as chirp spread spectrum (CSS) modulation, in LoRaWAN to ensure robust transmission over long d…...

Java - API

API全称"Application Programming Interface"&#xff0c;指应用程序编程接口 API&#xff08;JDK17.0&#xff09;链接如下 : Overview (Java SE 17 & JDK 17) (oracle.com)https://docs.oracle.com/en/java/javase/17/docs/api/中文版&#xff1a; Java17中…...

力扣 3152. 特殊数字Ⅱ

题目描述 queries二维数组是nums数组待判断的索引区间&#xff08;左闭右闭&#xff09;。需要判断每个索引区间中的nums相邻元素奇偶性是否不同&#xff0c;如果都不同则该索引区间的搜索结果为True&#xff0c;否则为False。 暴力推演&#xff1a;也是我最开始的思路 遍历q…...

识别和缓解软件安全威胁的最佳工具

软件安全威胁会给企业带来重大损失&#xff0c;从经济损失到声誉受损。 企业必须主动识别和缓解这些威胁&#xff0c;防止它们造成危害。 幸运的是&#xff0c;有许多工具可以帮助企业识别和缓解软件安全威胁。 在本博客中&#xff0c;我们将探讨识别和缓解软件安全威胁的顶…...

Linux下的压缩与解压:掌握核心命令行工具

目录 一.前言 二.压缩文件概述 三.tar&#xff1a;Linux 的通用归档工具 常用 tar 命令 四.gzip&#xff1a;强大的压缩程序 常用 gzip 命令 五.zip 和 unzip&#xff1a;处理 ZIP 压缩文件 常用 zip 和 unzip 命令 实用技巧和最佳实践 六.结语 一.前言 在 Linux …...

BGP选路实验

要求&#xff1a; 1.如图连接网络&#xff0c;合理规格IP地址&#xff0c;AS200内IGP协议为OSPF&#xff1b; 2.R1属于AS 100&#xff1b;R2-R3-R4小AS234、R5-R6-R7小AS567&#xff0c;同时声明大AS 200&#xff0c;R8属于AS300&#xff1b; 3.R2-R5、R4-R7之间为联邦EBGP邻居…...

白骑士的C#教学高级篇 3.3 网络编程

网络编程是现代应用程序开发中至关重要的一部分。C# 提供了一套丰富的 API 来处理基本网络通信、Web请求与响应。在本节中&#xff0c;我们将深入探讨这些内容&#xff0c;帮助您掌握如何在 C# 中进行网络编程。 基本网络通信 基本网络通信通常涉及套接字&#xff08;Socket&a…...

AI大模型赋能游戏:更智能、更个性化的NPC

参考论文&#xff1a;https://arxiv.org/abs/2403.10249 在传统游戏中&#xff0c;NPC&#xff08;非玩家角色&#xff09;的行为往往是预先设定好的&#xff0c;缺乏灵活性和变化性。然而&#xff0c;基于大模型的NPC可以利用其强大的推理和学习能力&#xff0c;实时生成对话…...

pymysql的上下文管理器:简化数据库操作

pymysql的上下文管理器&#xff1a;简化数据库操作 当我们使用 pymysql 操作数据库时&#xff0c;管理数据库连接和游标的生命周期是一项重要的任务。Python 的上下文管理器提供了一种优雅的方式来处理资源的获取和释放。在本文中&#xff0c;我们将探索如何创建一个简单的 py…...

AI秘境-墨小黑奇遇记 - 修炼成神经(二)

在解开了感知机和门电路的谜题后&#xff0c;墨小黑对人工智能的世界渐渐产生了浓厚的兴趣。他开始意识到&#xff0c;自己不仅是在学习一门复杂的技术&#xff0c;更是在探索一个充满未知与挑战的神秘领域。 入夜&#xff0c;墨小黑一脸无奈地盯着电脑屏幕&#xff0c;思考着自…...

计算机网络之分组交换时延的计算

一.类型 分组交换的时延包括一下几种&#xff1a; 1.1发送时延 发送时延&#xff0c;也叫传输时延&#xff0c;结点将分组的所有比特推向链路所需要的时间&#xff0c;即从发送分组的第一个比特算起&#xff0c;到该分组的最后一个比特发送完为止。 发送时延 分组长度 / 发…...

虚幻5|入门AI行为树,建立敌人

本章分成两块部分一块是第一点的制作一个简单的AI&#xff0c;后面第二点之后是第二部分建立ai行为树。这两个部分是一个衔接&#xff0c;最好不要跳看 一&#xff0c;制作一个简单的AI 1.首先&#xff0c;我们创建一个敌人的角色蓝图&#xff0c;添加一个场景组件widget用于…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架&#xff0c;并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下&#xff0c;重新定义算法中的某些步骤。简单来说&#xff0c;就是在一个方法中定义了要执行的步骤顺序或算法框架&#xff0c;但允许子类…...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python&#xff0c;或者java 的大型项目中&#xff0c;都会涉及到 自身平台微服务之间的相互调用&#xff0c;以及和第三发平台的 接口对接&#xff0c;那在python 中是怎么实现的呢&#xff1f; 在 Python Web 开发中&#xff0c;FastAPI 和 Django 是两个重要但定位不…...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)

目录 &#x1f50d; 若用递归计算每一项&#xff0c;会发生什么&#xff1f; Horners Rule&#xff08;霍纳法则&#xff09; 第一步&#xff1a;我们从最原始的泰勒公式出发 第二步&#xff1a;从形式上重新观察展开式 &#x1f31f; 第三步&#xff1a;引出霍纳法则&…...