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

news2024/9/19 10:52:54

   下面内容摘录自《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

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

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

相关文章

普通人看清房价走势的简单方法

研究了很多宏观方面的房价影响因素&#xff0c;还是很容易被看空和看多的房地产文章左右&#xff0c;也容易受到各种影响。 针对普通人而言&#xff0c;想要看清房价走势非常简单的一个方法&#xff0c; 你就看看你的工作状态【或者身边找工作的人多不多】 当你能挑工作的时…

老友记台词 第一季 第十三集 Friends 113(全英版)

文章目录 113 The One With the Boobies[Scene: Monica and Rachels, Chandler walks in and starts raiding the fridge. Then Rachel comes out of the shower with a towel wrapped round her waist, drying herself with another towel. Chandler and Rachel startle each …

CSC5613C 同步降压DC/DC

CSC5613C是一款同步降压型的DCDC变换器 IC&#xff0c;其输入电压为8~30V&#xff0c;具有良好的瞬态响应和环路稳定性。CSC5613C外围元器件极少&#xff0c;具有线补、过流保护和热保护功能。可通过调节FB电阻比例,来调整输出电压可用于快充。CSC5613C带载启动电流与其最大输出…

地下管线三维建模工具MagicPipe3D V3.5.2发布

经纬管网建模系统MagicPipe3D&#xff0c;本地离线参数化构建地下管网三维模型&#xff08;包括管道、接头、附属设施等&#xff09;&#xff0c;输出标准3DTiles、Obj模型等格式&#xff0c;支持Cesium、Unreal、Unity、Osg等引擎加载进行三维可视化、语义查询、专题分析&…

WPF窗体动态效果

在浏览网页的时候&#xff0c;发现现在很多网页都采用这种效果。看起来很炫。 效果如下&#xff1a; 已经实现很久了&#xff0c;一直没写出来。今天突然想到&#xff0c;写出来分享一下 原理比较简单&#xff0c;就是在Window里面放一个MediaElement控件&#xff0c;播放视频…

shell命令行解释器—既陌生有熟悉的东西

今天做一个感性的认识来&#xff0c;用一个生活的例子。 你生活在有一条村子里面&#xff0c;在村的东边就是王婆&#xff0c;王婆呢&#xff1f;她主要做什么呢啊&#xff1f;她在村儿里面呢&#xff0c;也不种地啊&#xff0c;那她干什么呢&#xff1f;他主要做帮别人进行婚嫁…

人工智能时代,网络安全公司F5如何提高防护效能?

随着AI推动的应用和API数量迅速增长&#xff0c;企业面临着日益严峻的安全挑战&#xff0c;亟需采取有效措施来应对。AI正将数字体验推向一个全新的高度&#xff0c;它通过分布式部署数据源、模型和服务在企业内部、云端和边缘计算环境中&#xff0c;并依靠不断扩展的API网络实…

旋转字符串 | LeetCode-796 | 模拟 | KMP | 字符串匹配

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f579;️KMP算法练习题 LeetCode链接&#xff1a;796. 旋转字符串 文章目录 1.题目描述&#x1f351;2.题解&#x1fad0;2.1 暴力解法&#x1fad2;2.2 模拟…

Go调度器

线程数过多,意味着操作系统会不断地切换线程,频繁的上下文切换就成了性能瓶颈.Go提供一种机制 可以在线程中自己实现调度,上下文切换更轻量,从而达到线程数少,而并发数并不少的效果,而线程中调度的就是Goroutine 调度器主要概念: 1.G:即Go协程,每个go关键字都会创建一个协程…

opencv基础的图像操作

1.读取图像&#xff0c;显示图像&#xff0c;保存图像 #图像读取、显示与保存 import numpy as np import cv2 imgcv2.imread(./src/1.jpg) #读取 cv2.imshow("img",img) #显示 cv2.imwrite("./src/2.jpg",img) #保存 cv2.waitKey(0) #让程序进入主循环(让…

Kubernetes/K8s集群1.23.6搭建

1 集群规划 HostnameIP角色centos702192.168.131.102mastercentos704192.168.131.104nodecentos705192.168.131.105node 2 安装步骤 初始操作和安装基础软件每个节点都要执行。 2.1 初始操作 2.1.1 关闭防火墙 systemctl stop firewalld systemctl disable firewalld2.1.…

单元训练06:独立按键的扩展应用

蓝桥杯 小蜜蜂 #include "stc15f2k60s2.h"// 定义LED打开 #define LED(x) \{ \P0 x; \P2 P2 & 0x1f | 0x80; \P2 P2 & 0x1f; \}// 以位数来定义第1、2至6个灯&#xff0c;注意&#xff…

发两张Pop!_OS 24.04-alpha版本截图

发两张Pop!_OS 24.04-alpha版本截图

《Linux运维总结:基于x86_64架构CPU使用docker-compose一键离线部署etcd 3.5.15容器版分布式集群》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面对不同的客户部署业务系统&#xff0…

flink文档刨析

flink任务运行方式 flink任务提交方式有3种 session、per-job、application三种 flink任务运行底座也有三种&#xff0c;Standalone、yarn、k8s 原则上一个flink任务运行的方式由3*39种&#xff0c;但是有些是没法搭配的 yarn&#xff1a;包括yarn-session 、yarn-per-job 、…

vue2+OpenLayers 天地图上凸显出当前地理位置区域(4)

凸显出当前区域 需要当前地方的json数据 这个可以在阿里的这个阿里 看下效果图 遮盖层的逃命都是可以调的 引入 下面一段代码 import sx from "/views/json/sx1.json"; // 下载的json import GeoJSON from "ol/format/GeoJSON"; // ol的一些方法 imp…

C++ | Leetcode C++题解之第335题路径交叉

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isSelfCrossing(vector<int>& distance) {int n distance.size();// 处理第 1 种情况int i 0;while (i < n && (i < 2 || distance[i] > distance[i - 2])) {i;}if (i n) {ret…

郊游、旅游管理系统-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设残哥 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目、 源…

汽车4S店管理系统-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设残哥 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目、 源…

微信小程序--26(全局配置-1)

一、全局配置文件 1.标志 app.json 2.配置项 pages 记录当前小程序所有页面的存放路径 window 全局配置小程序窗口配置 tabBar 设置小程序底部的tabBar效果 style 是否启用新版本的组将样式 3.window 导航栏区域 navigationBar …