上周在中国R语言大会北京会场上,给大家分享了如何利用R语言交互数据可视化。现场同学对这块内容颇有兴趣,故今天把一些常用的交互可视化的R包搬出来与大家分享。

rCharts

说起R语言的交互包,第一个想到的应该就是rCharts包。该包直接在R中生成基于D3的Web界面。

rCharts包的安装

  1. require(devtools)
  2. install_github('rCharts', 'ramnathv')

rCharts函数就像lattice函数一样,通过formula、data指定数据源和绘图方式,并通过type指定图表类型。

下面通过例子来了解下其工作原理。我们以鸢尾花数据集为例,首先通过name函数对列名进行重新赋值(去掉单词间的点),然后利用rPlot函数绘制散点图(type=”point”),并利用颜色进行分组(color=”Species”)。

  1. library(rCharts)
  2. names(iris) = gsub("\\.", "", names(iris))
  3. p1 <- rPlot(SepalLength ~ SepalWidth | Species, data = iris, color = 'Species', type = 'point')
  4. p1

rCharts支持多个javascript图表库,每个都有自己的长处。每一个图表库有多个定制选项,其中大部分rCharts都支持。

NVD3 是一个旨在建立可复用的图表和组件的 d3.js 项目——它提供了同样强大的功能,但更容易使用。它可以让我们处理复杂的数据集来创建更高级的可视化。在rCharts包中提供了nPlot函数来实现。

下面以眼睛和头发颜色的数据(HairEyeColor)为例说明nPlot绘图的基本原理。我们按照眼睛的颜色进行分组(group=”eye”),对头发颜色人数绘制柱状图,并将类型设置为柱状图组合方式(type=”multiBarChart”),这样可以实现分组和叠加效果。

  1. library(rCharts)
  2. hair_eye_male <- subset(as.data.frame(HairEyeColor), Sex == "Male")
  3. hair_eye_male[,1] <- paste0("Hair",hair_eye_male[,1])
  4. hair_eye_male[,2] <- paste0("Eye",hair_eye_male[,2])
  5. n1 <- nPlot(Freq ~ Hair, group = "Eye", data = hair_eye_male,
  6. type = "multiBarChart")
  7. n1

可以通过图形右上角选择需要查看或隐藏的类别(默认是全部类别显示的),也能通过左上角选择柱子是按照分组还是叠加的方式进行摆放(默认是分组方式)。如果选择Stacked,就会绘制叠加柱状图。

Highcharts是一个制作图表的纯Javascript类库,支持大部分的图表类型:直线图,曲线图、区域图、区域曲线图、柱状图、饼状图、散布图等。在rCharts包中提供了hPlot函数来实现。

以MASS包中的学生调查数据集survery为例,说明hPlot绘图的基本原理。我们绘制学生身高和每分钟脉搏跳动次数的气泡图,以年龄变量作为调整气泡大小的变量。

  1. library(rCharts)
  2. a <- hPlot(Pulse ~ Height, data = MASS::survey, type = "bubble",
  3. title = "Zoom demo", subtitle = "bubble chart",
  4. size = "Age", group = "Exer")
  5. a$colors('rgba(223, 83, 83, .5)', 'rgba(119, 152, 191, .5)',
  6. 'rgba(60, 179, 113, .5)')
  7. a$chart(zoomType = "xy")
  8. a$exporting(enabled = T)
  9. a

rCharts包可以画出更多漂亮的交互图, http://ramnathv.github.io/rCharts/https://github.com/ramnathv/rCharts/tree/master/demo有更多的例子可供大家学习。

recharts

学习完rCharts包,可能有读者会问,我们有没有国人开发的包实现相似的效果呢?这边给大家推荐一个同样功能强大的recharts包。

本包来源于百度开发的国内顶尖水平的开源d3-js可视项目Echarts(Github Repo)。Yang Zhou和Taiyun Wei基于该工具开发了recharts包,经Yihui Xie修改后,可通过htmlwidgets传递js参数,大大简化了开发难度。但此包开发仍未完成。为了赶紧上手用,基于该包做了一个函数echartR(下载至本地,以后通过source命令加载),用于制作基础Echart交互图。需要R版本>=3.2.0.

安装方式如下:

  1. library(devtools)
  2. install_github('yihui/recharts')

安装完后,需要在https://github.com/madlogos/recharts/blob/master/R/echartR.R将echartR.R脚本下载到本地。

假如想对鸢尾花数据集绘制散点图,可以执行如下代码:

  1. source("~echartR.R")
  2. names(iris) = gsub("\\.", "", names(iris))
  3. echartR(data=iris,x=~SepalLength,y=~PetalWidth,series = ~Species,
  4. type = 'scatter')

绘制柱状图:

  1. hair_eye_male <- subset(as.data.frame(HairEyeColor), Sex == "Male")
  2. hair_eye_male[,1] <- paste0("Hair",hair_eye_male[,1])
  3. hair_eye_male[,2] <- paste0("Eye",hair_eye_male[,2])
  4. echartR(data = hair_eye_male, x = Hair, y = ~Freq,  series = ~Eye,
  5. type = 'bar', palette='fivethirtyeight',
  6. xlab = 'Hair', ylab = 'Freq')

玫瑰图:

  1. dtcars <- mtcars
  2. dtcars$car <- row.names(dtcars)
  3. dtcars$transmission <- as.factor(dtcars$am)
  4. levels(dtcars$transmission) <- c("Automatic","Manual")
  5. dtcars$cylinder <- as.factor(dtcars$cyl)
  6. dtcars$carburetor <-as.factor(dtcars$carb)
  7. echartR(dtcars, x = ~cylinder,  y = ~car, type='rose',
  8. palette='colorblind', title='Number of Cylinders',
  9. subtitle = '(source: mtcars)')

雷达图:

  1. player <- data.frame(name=c(rep("Philipp Lahm",8),rep("Dani Alves",8)),
  2. para=rep(c("Passing%","Key passing","Comp crosses",
  3. "Crossing%","Successful dribbles",
  4. "Dispossessed","Dribbled past","Fouls"),2),
  5. value=c(89.67, 1.51, 0.97, 24.32, 0.83, 0.86, 1.15, 0.47,
  6. 86.62, 2.11, 0.99, 20.78, 1.58, 1.64, 0.9, 1.71))
  7. echartR(player, x= ~para, y= ~value, series= ~name, type='radarfill',
  8. symbolList='none', palette=c('firebrick1','dodgerblue'),
  9. title='Lahm vs Alves', subtitle= '(by @mixedknuts)')

plotly

接下来要给大家介绍的是另一个功能强大的plotly包。它是一个基于浏览器的交互式图表库,它建立在开源的JavaScript图表库plotly.js之上。

有两种安装方式:

  1. install.packages("plotly")

或者

  1. devtools::install_github("ropensci/plotly")

plotly包利用函数plot_ly函数绘制交互图。

如果相对鸢尾花数据集绘制散点图,需要将mode参数设置为”markers”。

  1. library(plotly)
  2. p <- plot_ly(iris, x = Petal.Length, y = Petal.Width,
  3. color = Species, colors = "Set1", mode = "markers")
  4. p

如果想绘制交互箱线图,需要将type参数设置为box。

  1. library(plotly)
  2. plot_ly(midwest, x = percollege, color = state, type = "box")

如果你已熟悉ggplot2的绘图系统,也可以针对ggplot2绘制的对象p,利用ggplotly函数实现交互效果。例如我们想对ggplot绘制的密度图实现交互效果,执行以下代码即可。

  1. library(plotly)
  2. p <- ggplot(data=lattice::singer,aes(x=height,fill=voice.part))+
  3. geom_density()+
  4. facet_grid(voice.part~.)
  5. (gg <- ggplotly(p))

其他

此外还有很多好玩有用的交互包。例如专门用来画交互时序图的dygraphs包,可通过install.packages(“dygraphs”)安装。

  1. library(dygraphs)
  2. lungDeaths <- cbind(mdeaths, fdeaths)
  3. dygraph(lungDeaths) %>%
  4. dySeries("mdeaths", label = "Male") %>%
  5. dySeries("fdeaths", label = "Female") %>%
  6. dyOptions(stackedGraph = TRUE) %>%
  7. dyRangeSelector(height = 20)

DT包实现R数据对象可以在HTML页面中实现过滤、分页、排序以及其他许多功能。通过install.packages(“DT”)安装。

以鸢尾花数据集iris为例,执行以下代码:

  1. library(DT)
  2. datatable(iris)

networkD3包可实现D3 JavaScript的网络图,通过install.packages(“networkD3”)安装。

下面是绘制一个力导向的网络图的例子。

  1. # 加载数据
  2. data(MisLinks)
  3. data(MisNodes)
  4.  
  5. # 画图
  6. forceNetwork(Links = MisLinks, Nodes = MisNodes,
  7. Source = "source", Target = "target",
  8. Value = "value", NodeID = "name",
  9. Group = "group", opacity = 0.8)

我们可以通过d3treeR包绘制交互treemap图,利用

  1. devtools::install_github("timelyportfolio/d3treeR")

完成d3treeR包安装。

  1. library(treemap)
  2. library(d3treeR)
  3. data("GNI2014")
  4. tm <-  treemap(
  5. GNI2014,
  6. index=c("continent", "iso3"),
  7. vSize="population",
  8. vColor="GNI",
  9. type="value"
  10. )
  11. d3tree( tm,rootname = "World" )

今天主要是介绍了几个R常用的交互包。在R的环境中,动态交互图形的优势在于能和knitr、shiny等框架整合在一起,能迅速建立一套可视化原型系统。希望以后再跟各位分享这部分的内容。

利用R语言进行交互数据可视化(转)的更多相关文章

  1. 利用R语言制作出漂亮的交互数据可视化

    利用R语言制作出漂亮的交互数据可视化 利用R语言也可以制作出漂亮的交互数据可视化,下面和大家分享一些常用的交互可视化的R包. rCharts包 说起R语言的交互包,第一个想到的应该就是rCharts包 ...

  2. R语言分析朝阳医院数据

    R语言分析朝阳医院数据 本次实践通过分析朝阳医院2016年销售数据,得出“月均消费次数”.“月均消费金额”.“客单价”.“消费趋势”等结果,并据此作出可视化图形. 一.读取数据: library(op ...

  3. 利用R语言打造量化分析平台

    利用R语言打造量化分析平台 具体利用quantmod包实现对股票的量化分析 1.#1.API读取在线行情2.#加载quantmod包3.if(!require(quantmod)){4. instal ...

  4. [译]用R语言做挖掘数据《二》

    数据探索 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: ...

  5. R语言- 实验报告 - 利用R语言脚本与Java相互调用

    一. 实训内容 利用R语言对Java项目程序进行调用,本实验包括利用R语言对java的.java文件进行编译和执行输出. 在Java中调用R语言程序.本实验通过eclipse编写Java程序的方式,调 ...

  6. R语言实现金融数据的时间序列分析及建模

    R语言实现金融数据的时间序列分析及建模 一 移动平均    移动平均能消除数据中的季节变动和不规则变动.若序列中存在周期变动,则通常以周期为移动平均项数.移动平均法可以通过数据显示出数据长期趋势的变动 ...

  7. R语言处理Web数据

    R语言处理Web数据 许多网站提供的数据,以供其用户的消费.例如,世界卫生组织(WHO)提供的CSV,TXT和XML文件的形式的健康和医疗信息报告.基于R程序,我们可以通过编程提取这些网站的具体数据. ...

  8. R语言︱处理缺失数据&&异常值检验、离群点分析、异常值处理

    在数据挖掘的过程中,数据预处理占到了整个过程的60% 脏数据:指一般不符合要求,以及不能直接进行相应分析的数据 脏数据包括:缺失值.异常值.不一致的值.重复数据及含有特殊符号(如#.¥.*)的数据 数 ...

  9. R语言:读取数据

    主要学习如何把几种常用的数据格式导入到R中进行处理,并简单介绍如何把R中的数据保存为R数据格式和csv文件. 1.保存和加载R的数据(与R.data的交互:save()函数和load()函数)a &l ...

随机推荐

  1. 1132: 零起点学算法39——多组测试数据(a+b)

    1132: 零起点学算法39--多组测试数据(a+b) Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: ...

  2. Parse error: syntax error, unexpected '[' in D:\phpStudy\WWW\tp5\thinkphp\library\think\Loader.php on line 18

    g刚学习tp5就遇到了这个问题  百思不得其解,看到官网说明 是基于PHP5.4 设计的  打开 phpstudy版本一看 就呵呵呵了 .还是5.3的版本.更换版本之后 就ok了.

  3. Excel import

    Case Study: Reading cell content from excel template for COM variant type VT_R4 or VT_R8 is always l ...

  4. 浅谈echo、print、var_dump()、print_r()的区别

    1.echo 和 print 的区别 共同点:首先echo 和 print 都不是严格意义上的函数,他们都是语言结构;他们都只能输出 字符串,整型跟int型浮点型数据.不能打印复合型和资源型数据: 而 ...

  5. 【Azure】Azure技能树

  6. PPT素才搜索简谈

    PPT已经是大部分公司工作汇报.培训.年度总结等不可缺少的办公软件.下面介绍一些关于PPT素才搜索的方法. 第一:模板    1.搜索大法--filetype:对应的文档格式 在关键词后添加这样一段文 ...

  7. lighttpd启动问题

    /home/yuna/web/app/lighttpd/sbin/lighttpd -f /home/yuna/web/app/lighttpd/lighttpd.conf -m /home/yuna ...

  8. 使用 Composer 安装 Laravel 框架

    前言: 1. Composer 安装 Laravel 有两种方式: 第一种是通过 Composer 的 create-project 命令安装 Laravel 框架, 第二种是先通过 Composer ...

  9. 【算法系列学习】SPFA邻接表最短路 [kuangbin带你飞]专题四 最短路练习 F - Wormholes

    https://vjudge.net/contest/66569#problem/F 题意:判断图中是否存在负权回路 首先,介绍图的邻接表存储方式 数据结构:图的存储结构之邻接表 邻接表建图,类似于头 ...

  10. WF4.0以上使用代码完整自定义动态生成执行工作流Xaml文件

    给大家分享一下,如何完全使用代码自定义的创建生成工作流文件(用代码创建Xaml文件),并且动态加载运行所生成的工作流. 工作流生成后 在Xaml文件里的主要节点如下: 输入输出参数 <x:Mem ...