前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【最终章】R语言从入门到精通Day18:Shiny高级可视化

【最终章】R语言从入门到精通Day18:Shiny高级可视化

作者头像
用户6317549
发布2019-12-26 15:13:14
4.2K0
发布2019-12-26 15:13:14
举报
文章被收录于专栏:科研猫科研猫
在本系列「R语言从入门到精通」前面的所有章节中,科研猫带领大家熟悉了R语言中的数据分析和绘图技巧。相信这些已经足够让大家在平时的学习工作中游刃有余吧。那么最后一节课,我们希望给大家带来一些更加酷炫的可视化技巧,那就是R语言的shiny包

前面17节链接,点击下方有色字体即可

入门教材day1day2day3day4day5day6day7day8day9day10day11day12day13day14day15day16day17

在shiny包的帮助下,数据分析之后的图像变为可交互的“网页”,就像目前常见的动态网页。换句话说,使用shiny包能让你的数据分析结果“表达能力”更强。shiny包的功能复杂而强大,一篇推文显然不可能将所有功能解释清楚,所以这次教程通过几个小例子给大家展示shiny包的优点和基本用法,方便大家进一步学习探索。

例1

第一个小例子首先让大家体验一下shiny包的功能,是关于数据集iris的k-means聚类结果展示。

大家需要拿到后台代码才能在本地运行本例,没有安装shiny包的同学需要先安装并载入shiny包

代码文件保存在文件夹kmeans下的app.R中,在R中运行(*此时R中的路径应在app.R的上一级,即和文件夹kmeans位于同一级目录下):

runApp("kmeans")

结果图1所示。

图1,iris聚类结果示例。

大家可以尝试在左边调整X variable和Y variable、cluster count,观察右边图片的变化。在之前的R代码中,要展示不同对变量为坐标轴时样本的聚类情况,我们需要绘制多幅图片,而在这个例子中,只需要调整参数就可以灵活展示了。

上例,大家也可以通过函数runExample()来观察shiny包中内置的范例。如:

> runExample(“01_hello”)

shiny包中内置了11个示例,大家可以通过后台代码一一查看。

例2

了解了上面这些例子之后,观察示例中的代码不难发现,一个shiny app中一定包含了R脚本app.R,这个脚本位于文件夹下(如kmeans),运行这个shiny app只需要运行函数runApp()即可。脚本app.R则由三个部分组成:user interface object、server function和函数shinyApp()。如图2所示。

图2,脚本app.R结构。

顾名思义,上图中ui(user interface)部分定义了shiny app的“外形”,server function则控制了后台的数据交换等。(脚本app.R也可以拆分成ui和server function两个脚本,但是最新版本的shiny包不推荐这种拆分得写法。)后台代码中的app1对内置例子01_hello进行了几处细节的修改,如图3:

图3,01_hello的修改版本。

大家不妨观察一下ui和代码,有助于理解代码的含义。(上图可以通过运行得到)

> runApp(“app1”, display.mode = “showcase”)

先从ui部分开始,shiny app中一般用函数fluidPage()生成页面,页面中的元素都包含在函数fluidPage()中。函数titlePanel()和函数sidebarLayout()则是函数fluidPage()中最常用的元素,分别控制了标题和内容,函数sidebarLayout()中一般包含了控制侧边栏的函数sidebarPanel()(函数sidebarLayout()的参数position可以调整侧边栏的位置(如position=“right”时,侧边栏会出现在页面的右边))和控制主要内容的函数mainPanel(),侧边栏一般都是用于图形中的参数调整或输入。

**上面的这些函数都是最简单基本的页面设置方法,shin包还有其它类似函数,这里就留给大家自己去研究了**

在shiny app的页面设置过程中充分借鉴了HTML语言,例子app2中尽可能多的展示了这一特性,如图4所示:

图4,shiny app的ui对HTML语言的借鉴。

这个例子中涉及了字体设置,插入图片,插入链接等,和HTML语言完全类似,大家可以自行阅读app2文件夹中的app.R代码。

例3

在前两个例子中,我们可以通过改变侧边栏中的一些设置来改变图形,那这些control widgets是怎么设置的呢?我们通过app3给大家展示了常用的control widgets的设置形式。如图5,总的来说和在页面中添加文字,图片等方法类似,区别在于,每个control widgets的前两个参数都是:widget指向的变量名和widget的标签(label)。前者用于后台传递数据,后者显示在页面上(向用户解释这个control widget的用法)。

图5,control widgets的设置。

Control widgets将参数传递到后台,那这些参数导致的图形变化怎么返回在shiny app的ui上呢?要实现这一点,需要在ui和server function两部分都添加相应的函数。图6和图7分别展示了在ui和server function中常用的函数和它们对应的显示结果。

图6,在ui端添加R object的函数列表。

图7,server function中相对应的生成R obiect的常用函数。

例4

这里app4是一个不错的例子,它将两个control widgets的参数用文本的形式返回在ui上。大家可以通过运行app4和调整control widgets来观察这一过程。

了解了参数在ui和server function两端的传递过程之后,我们就可以按照R语言一般的原理将数据和参数传递给绘图函数,然后将图形显示在ui上了。这里例子census_app和stock展示这一过程(你需要在本地准备了相应的R包,如census_app中要求map包等)。如图8和图9。

图8,例子census_app

图9,例子stock。

细心的同学可能会发现,两个例子中的server function结构不太一样,这是因为函数renderPlot()中的代码在每次用户改变输入参数时都会运行一次,而函数reactive()则只有在被检查的参数改变时才运行,避免了不必要的计算(例子stock中的数据需要联网下载,如果每次都重新下载,会使代码运行缓慢)。

到这里,大家已经可以编写自己的shiny app了。那如果你想把你的shiny app分享或者展示给其它人,最简单的方式就将整个文件夹(包括数据、附加代码等)分享;当然你也可以选择上传至Github,这样你让对方在本地运行:

> runGitHub( "", "")

即可;最后你还可以采用网页式方法。这也是shiny包可视化相比于一般R包的一项优势。

shiny包借鉴了很多编写网页的思想和方法,从而实现了网页应用和R语言的“双剑合璧”,同时它也能和Markdown包、CSS、JavaScript等方法联合使用,是一种非常优秀的数据可视化方法,希望能成为大家日后数据可视化的新工具。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科研猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档