导语
GUIDE ╲
旭日图是饼图的一种扩展,每一层都展示一组分类的比例。sunburstR可绘制交互式旭日图
使用方法
##安装包
install.packages("sunburstR")
library(sunburstR)
01
add_shiny 添加Shiny事件
shiny是R的Web应用程序框架,使用R构建交互式Web应用程序较容易
1. 例一
library(shiny)
#读取source中提供的示例visit-sequences.csv示例数据
#只使用前100行来加速包的构建和检查
# https://gist.github.com/kerryrodden/7090426#file-visit-sequences-csv
sequences <- read.csv(
system.file("examples/visit-sequences.csv",package="sunburstR")
,header = FALSE
,stringsAsFactors = FALSE
)[1:200,]
fix(sequences)
#示例中的符号“-”是将每层名称连起来
#创建d2b sunburst
s2b <- sund2b(sequences)
#sund2b创建具有‘d2b’制图库的交互式sunburst图,d2b是图表组件
options(shiny.trace=FALSE)
#是否启动“追踪”,若shiny.trace=TRUE,当应用程序运行时,将在控制台中看到输出
ui <- sund2bOutput("s2b")
#sund2bOutput,在Shiny应用程序和交互式Rmd文件中使用d2b输出函数
server <- function(input, output, session) {
output$s2b <- renderSund2b({
add_shiny(s2b)
})
}
shinyApp(ui, server)#运行Shiny
02
d2b-shiny d2b绑定shiny
1. 示例一 基于visit-sequences.csv示例数据
sequences <- read.csv(
system.file("examples/visit-sequences.csv",package="sunburstR")
,header = FALSE,stringsAsFactors = FALSE)[1:100,]
(1)
sunburst(sequences
#对图例应用sequences顺序
)
##sunburst绘制旭日图
(2)
sunburst(sequences,count = TRUE
#count在中心的解释中包括计算和合计
)
(3)
sunburst(sequences,
legendOrder = unique(unlist(strsplit(sequences[,1],"-"))),
#只需在中间的说明中提供名称即可
explanation = "function(d){return d.data.name}"
#JavaScript功能对旭日图中心定义一个自定义解释,会覆盖覆盖百分比和计数
)
2. 示例二 基于JavaScript语言数据(json)
sequence_json <- jsonlite::fromJSON(
system.file("examples/visit-sequences.json",package="sunburstR"),
simplifyDataFrame = FALSE
)
sunburst(sequence_json)
3. 示例三 使用这个fork中的csv数据
# https://gist.github.com/mkajava/7515402
sunburst(csvdata = read.csv(file = paste0(
"https://gist.githubusercontent.com/mkajava/",
"7515402/raw/9f80d28094dc9dfed7090f8fb3376ef1539f4fd2/",
"comment-sequences.csv")
,header = TRUE,stringsAsFactors = FALSE))
#下图是数据情况
4. 示例四 使用这个fork中的csv数据
# https://gist.github.com/rileycrane/92a2c36eb932b4f99e51/
sunburst( csvdata = read.csv(file = paste0(
"https://gist.githubusercontent.com/rileycrane/",
"92a2c36eb932b4f99e51/raw/",
"a0212b4ca8043af47ec82369aa5f023530279aa3/visit-sequences.csv")
,header=FALSE,stringsAsFactors = FALSE))
#下图是数据情况
5. 示例五 可视化来自Peter Norvig的ngram数据
# http://norvig.com/mayzner.html
install.packages("pipeR")
library(pipeR)
ngrams2 <- read.csv(
system.file("examples/ngrams2.csv",package="sunburstR"), stringsAsFactors = FALSE)
fix(ngrams2)
ngrams2 %>>%
# let's look at ngrams at the start of a word, so columns 1 and 3
(.[,c(1,3)]) %>>%
# split the ngrams into a sequence by splitting each letter and adding -
(data.frame(sequence = strsplit(.[,1],"") %>>%
lapply( function(ng){ paste0(ng,collapse = "-") } ) %>>%
unlist,freq = .[,2],stringsAsFactors = FALSE)
) %>>%
library(htmltools)
ngrams2 %>>%
(lapply(seq.int(3,ncol(.)),function(letpos){
(.[,c(1,letpos)]) %>>%
# split the ngrams into a sequence by splitting each letter and adding -
(data.frame(
sequence = strsplit(.[,1],"") %>>%
lapply( function(ng){ paste0(ng,collapse = "-") } ) %>>%unlist,
freq = .[,2],stringsAsFactors = FALSE
)) %>>%
( tags$div(style="float:left;",sunburst( ., height = 300, width = 300 )) )
})) %>>%
tagList %>>%
browsable
6. 示例六
install.packages("treemap")
library(treemap)
library(sunburstR)
library(d3r)
#使用来自?treemap::treemap的示例
data(GNI2014)
#treemap是一种层次结构的空间填充可视化
tm <- treemap(GNI2014,
index=c("continent", "iso3"),
#索引变量(最多4个)
vSize="population",
#vSize确定矩形大小的变量的名称
vColor="continent",
#确定矩形颜色的变量的名称
type="index"
#treemap类型,
)
tm_nest <- d3_nest(
tm$tm[,c("continent", "iso3", "vSize", "color")],
value_cols = c("vSize", "color")
)
sunburst(data = tm_nest,
valueField = "vSize",
#valueField是用于计算size的字符。默认值是“size”
count = TRUE,
#避免pre-summed trees的重复计数
sumNodes = FALSE,
#是否对非叶节点进行logical求和
colors = htmlwidgets::JS("function(d){return d3.select(this).datum().data.color;}"),
withD3 = TRUE
#包括来自d3r的d3依赖
)
7. 示例七 创建日历数据
df <- data.frame(date = seq.Date(
as.Date('2014-01-01'),
as.Date('2016-12-31'),
by = "days"),stringsAsFactors = FALSE
)
df$year = format(df$date, "%Y")
df$quarter = paste0("Q", ceiling(as.numeric(format(df$date,"%m"))/3))
df$month = format(df$date, "%b")
df$path = paste(df$year, df$quarter, df$month, sep="-")
df$count = rep(1, nrow(df))
sunburst(
data.frame(xtabs(count~path,df)),
sortFunction = htmlwidgets::JS(
"
function(a,b){
abb = {
2014:-7,2015:-6,2016:-5,Q1:-4,Q2:-3,Q3:-2,Q4:-1,
Jan:1,Feb:2,Mar:3,Apr:4,May:5,Jun:6,Jul:7,Aug:8,
Sep:9,Oct:10,Nov:11,Dec:12
}
return abb[a.data.name] - abb[b.data.name];
} ")
)
8. 示例八 排序示例
#按照发生的顺序放置数据
df <- data.frame(
group = c("foo", "bar", "xyz"),
value = c(1, 3, 2)
)
sunburst(df,
#创建一个trivial sort函数
sortFunction = htmlwidgets::JS('function(x) {return x;}'))
new_order <- c(3,2,1)
sunburst(df[new_order,],
sortFunction = htmlwidgets::JS('function(x) {return x;}'))
03
sunburst-shiny sunburst绑定shiny
1. 改变配色方案
(1)
sequences <- read.csv(
system.file("examples/visit-sequences.csv",package="sunburstR")
,header = FALSE
,stringsAsFactors = FALSE
)[1:200,]
#sund2b() API用更少的参数映射sunburst()
sund2b(sequences,
colors = htmlwidgets::JS("d3.scaleOrdinal(d3.schemeCategory20b)")
) #改变颜色
#使用d3.js分类色彩方案
(2)
#使用RColorBrewer配色方案
sund2b(
sequences,
colors = list(range = RColorBrewer::brewer.pal(9, "Set3"))
)
2. 使用来自R数据集的颜色列
library(treemap)
library(d3r)
rhd <- random.hierarchical.data()
tm <- treemap( rhd,
index = paste0("index", 1:3),
vSize = "x",
draw = FALSE
)$tm
sund2b(
d3_nest(tm, value_cols = colnames(tm)[-(1:3)]),
colors = htmlwidgets::JS(
"function(name, d){return d.color || '#ccc';}"
),
valueField = "vSize"
)
04
sund2bBreadcrumb 高级定制d2b“面包屑”导航
sequences <- read.csv(
system.file("examples/visit-sequences.csv",package="sunburstR")
,header = FALSE
,stringsAsFactors = FALSE
)[1:200,]
(1)
sund2b(sequences,
breadcrumbs = sund2bBreadcrumb(
enabled = FALSE
#是否启用面包屑导航
))
(2)
#更改面包屑导航内容
sund2b(sequences,
breadcrumbs = sund2bBreadcrumb(
#定制面包屑导航的内容
html = htmlwidgets::JS("
function(nodedata, size, percent) {
return '<span style=\"font-weight: bold;\">' + nodedata.name + '</span>' + ' ' + size
}
")
)
)
05
sund2bTooltip d2b工具提示的高级定制
sequences <- read.csv(
system.file("examples/visit-sequences.csv",package="sunburstR")
,header = FALSE
,stringsAsFactors = FALSE
)[1:200,]
#更改tooltip提示标签位置
sund2b(sequences,
tooltip = sund2bTooltip(
html = htmlwidgets::JS("
function(nodedata, size, percent) {
return '<span style=\"font-weight: bold;\">' + nodedata.name + '</span>' + ' ' + size
}
"),
my = "left" #标签位于左侧
)
)
小编总结
sunburstR对于直观的展示多维分组变量很有优势,既方便又美观,并且提供交互式。可以直接输出图片形式或网页,很好用哦!