下面内容摘录自《用R探索医药数据科学》专栏文章的部分内容(原文6991字)。
1篇1章4节:医药数据科学入门之认识数据可视化(更新20240814)_在r语言的众多可视化中,哪个包提供了交互式图形的功能但并未专门用于静态图表绘制-CSDN博客
运用 Shiny 包打造基于鸢尾花数据集的交互式数据可视化应用
在数据科学中,数据的探索和可视化是分析的重要组成部分。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.Length、Sepal.Width、Petal.Length、Petal.Width和Species,其中前四列是数值型,那么df_num将只包含前四列。
4、定义用户界面
在 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生成的图形。
5、定义服务器端逻辑
定义服务器端逻辑指的是明确和编写在服务器端运行的一系列规则、流程和操作,以处理来自客户端(如网页浏览器或移动应用)的请求,并根据这些请求执行相应的任务。服务器端逻辑涵盖了广泛的功能,例如接收和解析客户端发送的数据,与数据库进行交互以读取或写入信息,执行复杂的计算和数据处理操作,根据特定条件做出决策,生成动态的内容并将其返回给客户端,以及处理用户认证、授权和安全性等方面的任务。
举个例子,当用户在购物网站上提交订单时,服务器端逻辑会验证订单信息的完整性和准确性,检查库存数量,计算总价,将订单数据保存到数据库中,并最终向用户返回确认消息。又比如,在社交媒体平台上,服务器端逻辑会决定哪些内容应该显示在用户的动态页面上,基于用户的关注列表、发布时间和内容相关性等因素进行筛选和排序。
# 定义服务器端逻辑 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函数会在散点图的边缘添加密度图或直方图。
6、 启动 Shiny 应用和效果展示
shinyApp(ui, server)这段代码将 UI 和服务器逻辑组合在一起,并启动 Shiny 应用。运行此应用后,用户可以选择不同的 X 轴和 Y 轴变量,筛选特定物种,并通过复选框控制是否显示物种、添加边际图或平滑曲线。
市面上的 R 语言培训班和书籍(包括网络上的文章或视频),由于受限于培训时间或书籍篇幅,往往难以深入探讨 R 语言在数据科学或人工智能中的具体应用场景,内容泛泛而谈,最终无法真正解决实际工作中的问题。同时,它们也缺乏针对医药领域的深度结合与讨论。为了解决这些痛点,我们推出了《用 R 探索医药数据科学》专栏。该专栏将持续更新,不仅为您提供系统化的学习内容,更致力于成为您掌握最新、最全医药数据科学技术的得力助手。
- 每篇文章篇幅在5000字 至9000字之间。
- 内容涵盖试验统计、预测模型、科研绘图、数据库、机器学习等热点领域。
《用 R 探索医药数据科学》专栏的学习指南
重新整理《用 R 探索医药数据科学》专栏目录形成学习的目的是为读者梳理出一个清晰、系统的知识脉络。通过将内容划分为工具使用、常规技术、可视化等9大板块的共10部分内容,能让读者快速定位到所需知识领域,直观把握不同章节间的逻辑关系与递进层次。这有助于初学者构建完整的知识体系,有步骤地开启学习之旅;也方便进阶者迅速检索特定技术内容,进行深入研究与实践,提升了专栏内容的可读性与实用性。