
利用R語(yǔ)言制作出漂亮的交互數(shù)據(jù)可視化
利用R語(yǔ)言也可以制作出漂亮的交互數(shù)據(jù)可視化,下面和大家分享一些常用的交互可視化的R包。
rCharts包
說起R語(yǔ)言的交互包,第一個(gè)想到的應(yīng)該就是rCharts包。該包直接在R中生成基于D3的Web界面。
rCharts包的安裝:
require(devtools) install_github('rCharts', 'ramnathv')
rCharts函數(shù)就像lattice函數(shù)一樣,通過formula、data指定數(shù)據(jù)源和繪圖方式,并通過type指定圖表類型。
下面通過例子來(lái)了解下其工作原理。我們以鳶尾花數(shù)據(jù)集為例,首先通過name函數(shù)對(duì)列名進(jìn)行重新賦值(去掉單詞間的點(diǎn)),然后利用rPlot函數(shù)繪制散點(diǎn)圖(type=”point”),并利用顏色進(jìn)行分組(color=”Species”)。
library(rCharts)
names(iris) = gsub("\\.", "", names(iris))
p1 <- rPlot(SepalLength ~ SepalWidth | Species, data = iris, color = 'Species', type = 'point')
p1
rCharts支持多個(gè)javascript圖表庫(kù),每個(gè)都有自己的長(zhǎng)處。每一個(gè)圖表庫(kù)有多個(gè)定制選項(xiàng),其中大部分rCharts都支持。
NVD3 是一個(gè)旨在建立可復(fù)用的圖表和組件的 d3.js 項(xiàng)目——它提供了同樣強(qiáng)大的功能,但更容易使用。它可以讓我們處理復(fù)雜的數(shù)據(jù)集來(lái)創(chuàng)建更高級(jí)的可視化。在rCharts包中提供了nPlot函數(shù)來(lái)實(shí)現(xiàn)。
下面以眼睛和頭發(fā)顏色的數(shù)據(jù)(HairEyeColor)為例說明nPlot繪圖的基本原理。我們按照眼睛的顏色進(jìn)行分組(group=”eye”),對(duì)頭發(fā)顏色人數(shù)繪制柱狀圖,并將類型設(shè)置為柱狀圖組合方式(type=”multiBarChart”),這樣可以實(shí)現(xiàn)分組和疊加效果。
library(rCharts)
hair_eye_male <- subset(as.data.frame(HairEyeColor), Sex == "Male")
hair_eye_male[,1] <- paste0("Hair",hair_eye_male[,1])
hair_eye_male[,2] <- paste0("Eye",hair_eye_male[,2])
n1 <- nPlot(Freq ~ Hair, group = "Eye", data = hair_eye_male,
type = "multiBarChart")
n1
可以通過圖形右上角選擇需要查看或隱藏的類別(默認(rèn)是全部類別顯示的),也能通過左上角選擇柱子是按照分組還是疊加的方式進(jìn)行擺放(默認(rèn)是分組方式)。如果選擇Stacked,就會(huì)繪制疊加柱狀圖。
Highcharts是一個(gè)制作圖表的純Javascript類庫(kù),支持大部分的圖表類型:直線圖,曲線圖、區(qū)域圖、區(qū)域曲線圖、柱狀圖、餅狀圖、散布圖等。在rCharts包中提供了hPlot函數(shù)來(lái)實(shí)現(xiàn)。
以MASS包中的學(xué)生調(diào)查數(shù)據(jù)集survery為例,說明hPlot繪圖的基本原理。我們繪制學(xué)生身高和每分鐘脈搏跳動(dòng)次數(shù)的氣泡圖,以年齡變量作為調(diào)整氣泡大小的變量。
library(rCharts)
a <- hPlot(Pulse ~ Height, data = MASS::survey, type = "bubble",
title = "Zoom demo", subtitle = "bubble chart",
size = "Age", group = "Exer")
a$colors('rgba(223, 83, 83, .5)', 'rgba(119, 152, 191, .5)',
'rgba(60, 179, 113, .5)')
a$chart(zoomType = "xy")
a$exporting(enabled = T)
a
rCharts包可以畫出更多漂亮的交互圖, http://ramnathv.github.io/rCharts/和https://github.com/ramnathv/rCharts/tree/master/demo有更多的例子可供大家學(xué)習(xí)。
recharts包
學(xué)習(xí)完rCharts包,可能有讀者會(huì)問,我們有沒有國(guó)人開發(fā)的包實(shí)現(xiàn)相似的效果呢?這邊給大家推薦一個(gè)同樣功能強(qiáng)大的recharts包。
本包來(lái)源于百度開發(fā)的國(guó)內(nèi)頂尖水平的開源d3-js可視項(xiàng)目Echarts(Github Repo)。Yang Zhou和Taiyun Wei基于該工具開發(fā)了recharts包,經(jīng)Yihui Xie修改后,可通過htmlwidgets傳遞js參數(shù),大大簡(jiǎn)化了開發(fā)難度。但此包開發(fā)仍未完成。為了趕緊上手用,基于該包做了一個(gè)函數(shù)echartR(下載至本地,以后通過source命令加載),用于制作基礎(chǔ)Echart交互圖。需要R版本>=3.2.0.
安裝方式如下:
library(devtools)
install_github('yihui/recharts')
安裝完后,需要在https://github.com/madlogos/recharts/blob/master/R/echartR.R將echartR.R腳本下載到本地。
假如想對(duì)鳶尾花數(shù)據(jù)集繪制散點(diǎn)圖,可以執(zhí)行如下代碼:
source("~echartR.R")
names(iris) = gsub("\\.", "", names(iris))
echartR(data=iris,x=~SepalLength,y=~PetalWidth,series = ~Species,
type = 'scatter')
繪制柱狀圖:
hair_eye_male <- subset(as.data.frame(HairEyeColor), Sex == "Male")
hair_eye_male[,1] <- paste0("Hair",hair_eye_male[,1])
hair_eye_male[,2] <- paste0("Eye",hair_eye_male[,2])
echartR(data = hair_eye_male, x = Hair, y = ~Freq, series = ~Eye,
type = 'bar', palette='fivethirtyeight',
xlab = 'Hair', ylab = 'Freq')
玫瑰圖:
dtcars <- mtcars
dtcars$car <- row.names(dtcars)
dtcars$transmission <- as.factor(dtcars$am)
levels(dtcars$transmission) <- c("Automatic","Manual")
dtcars$cylinder <- as.factor(dtcars$cyl)
dtcars$carburetor <-as.factor(dtcars$carb)
echartR(dtcars, x = ~cylinder, y = ~car, type='rose',
palette='colorblind', title='Number of Cylinders',
subtitle = '(source: mtcars)')
雷達(dá)圖:
player <- data.frame(name=c(rep("Philipp Lahm",8),rep("Dani Alves",8)),
para=rep(c("Passing%","Key passing","Comp crosses",
"Crossing%","Successful dribbles",
"Dispossessed","Dribbled past","Fouls"),2),
value=c(89.67, 1.51, 0.97, 24.32, 0.83, 0.86, 1.15, 0.47,
86.62, 2.11, 0.99, 20.78, 1.58, 1.64, 0.9, 1.71))
echartR(player, x= ~para, y= ~value, series= ~name, type='radarfill',
symbolList='none', palette=c('firebrick1','dodgerblue'),
title='Lahm vs Alves', subtitle= '(by @mixedknuts)')
plotly包
接下來(lái)要給大家介紹的是另一個(gè)功能強(qiáng)大的plotly包。它是一個(gè)基于瀏覽器的交互式圖表庫(kù),它建立在開源的JavaScript圖表庫(kù)plotly.js之上。
有兩種安裝方式:
install.packages("plotly")
或者
devtools::install_github("ropensci/plotly")
plotly包利用函數(shù)plot_ly函數(shù)繪制交互圖。
如果相對(duì)鳶尾花數(shù)據(jù)集繪制散點(diǎn)圖,需要將mode參數(shù)設(shè)置為”markers”。
library(plotly)
p <- plot_ly(iris, x = Petal.Length, y = Petal.Width,
color = Species, colors = "Set1", mode = "markers")
p
如果想繪制交互箱線圖,需要將type參數(shù)設(shè)置為box。
library(plotly)
plot_ly(midwest, x = percollege, color = state, type = "box")
如果你已熟悉ggplot2的繪圖系統(tǒng),也可以針對(duì)ggplot2繪制的對(duì)象p,利用ggplotly函數(shù)實(shí)現(xiàn)交互效果。例如我們想對(duì)ggplot繪制的密度圖實(shí)現(xiàn)交互效果,執(zhí)行以下代碼即可:
library(plotly)
p <- ggplot(data=lattice::singer,aes(x=height,fill=voice.part))+
geom_density()+
facet_grid(voice.part~.)
(gg <- ggplotly(p))
其他
此外還有很多好玩有用的交互包。例如專門用來(lái)畫交互時(shí)序圖的dygraphs包,可通過install.packages(“dygraphs”)安裝。
library(dygraphs)
lungDeaths <- cbind(mdeaths, fdeaths)
dygraph(lungDeaths) %>%
dySeries("mdeaths", label = "Male") %>%
dySeries("fdeaths", label = "Female") %>%
dyOptions(stackedGraph = TRUE) %>%
dyRangeSelector(height = 20)
DT包實(shí)現(xiàn)R數(shù)據(jù)對(duì)象可以在HTML頁(yè)面中實(shí)現(xiàn)過濾、分頁(yè)、排序以及其他許多功能。通過install.packages(“DT”)安裝。
以鳶尾花數(shù)據(jù)集iris為例,執(zhí)行以下代碼:
library(DT)
datatable(iris)
networkD3包可實(shí)現(xiàn)D3 JavaScript的網(wǎng)絡(luò)圖,通過install.packages(“networkD3”)安裝。
下面是繪制一個(gè)力導(dǎo)向的網(wǎng)絡(luò)圖的例子。
library(treemap)
library(d3treeR)
data("GNI2014")
tm <- treemap(
GNI2014,
index=c("continent", "iso3"),
vSize="population",
vColor="GNI",
type="value"
)
d3tree( tm,rootname = "World" )
我們可以通過d3treeR包繪制交互treemap圖,利用
devtools::install_github("timelyportfolio/d3treeR")
完成d3treeR包安裝。
library(treemap)
library(d3treeR)
data("GNI2014")
tm <- treemap(
GNI2014,
index=c("continent", "iso3"),
vSize="population",
vColor="GNI",
type="value"
)
d3tree( tm,rootname = "World" )
本文主要是介紹了幾個(gè)R常用的交互包。在R的環(huán)境中,動(dòng)態(tài)交互圖形的優(yōu)勢(shì)在于能和knitr、shiny等框架整合在一起,能迅速建立一套可視化原型系統(tǒng)。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03