前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >绘制旭日图:sunburstR

绘制旭日图:sunburstR

作者头像
作图丫
发布2022-03-29 11:35:32
1.8K0
发布2022-03-29 11:35:32
举报
文章被收录于专栏:作图丫

导语

GUIDE ╲

旭日图是饼图的一种扩展,每一层都展示一组分类的比例。sunburstR可绘制交互式旭日图

使用方法

代码语言:javascript
复制
##安装包
install.packages("sunburstR")
library(sunburstR)

01

add_shiny 添加Shiny事件

shiny是R的Web应用程序框架,使用R构建交互式Web应用程序较容易

1. 例一

代码语言:javascript
复制
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)
#示例中的符号“-”是将每层名称连起来
代码语言:javascript
复制
#创建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示例数据

代码语言:javascript
复制
sequences <- read.csv(
  system.file("examples/visit-sequences.csv",package="sunburstR")
  ,header = FALSE,stringsAsFactors = FALSE)[1:100,]

(1)

代码语言:javascript
复制
sunburst(sequences
         #对图例应用sequences顺序
         )
##sunburst绘制旭日图

(2)

代码语言:javascript
复制
sunburst(sequences,count = TRUE
         #count在中心的解释中包括计算和合计
         )

(3)

代码语言:javascript
复制
sunburst(sequences,  
  legendOrder = unique(unlist(strsplit(sequences[,1],"-"))),
  #只需在中间的说明中提供名称即可
  explanation = "function(d){return d.data.name}"  
  #JavaScript功能对旭日图中心定义一个自定义解释,会覆盖覆盖百分比和计数
  )

2. 示例二 基于JavaScript语言数据(json)

代码语言:javascript
复制
sequence_json <- jsonlite::fromJSON(
  system.file("examples/visit-sequences.json",package="sunburstR"),
  simplifyDataFrame = FALSE
)
sunburst(sequence_json)

3. 示例三 使用这个fork中的csv数据

代码语言:javascript
复制
# 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数据

代码语言:javascript
复制
# 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数据

代码语言:javascript
复制
# http://norvig.com/mayzner.html
install.packages("pipeR")
library(pipeR)
ngrams2 <- read.csv(
  system.file("examples/ngrams2.csv",package="sunburstR"), stringsAsFactors = FALSE)
fix(ngrams2)
代码语言:javascript
复制
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. 示例六

代码语言:javascript
复制
install.packages("treemap")
library(treemap)
library(sunburstR)
library(d3r)

#使用来自?treemap::treemap的示例
data(GNI2014)
代码语言:javascript
复制
#treemap是一种层次结构的空间填充可视化
tm <- treemap(GNI2014,
              index=c("continent", "iso3"),
              #索引变量(最多4个)
              vSize="population",
              #vSize确定矩形大小的变量的名称
              vColor="continent",
              #确定矩形颜色的变量的名称
              type="index"
              #treemap类型,
              )
代码语言:javascript
复制
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. 示例七 创建日历数据

代码语言:javascript
复制
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))
代码语言:javascript
复制
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. 示例八 排序示例

代码语言:javascript
复制
#按照发生的顺序放置数据
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)

代码语言:javascript
复制
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)

代码语言:javascript
复制
#使用RColorBrewer配色方案
sund2b(
  sequences,
  colors = list(range = RColorBrewer::brewer.pal(9, "Set3"))
)

2. 使用来自R数据集的颜色列

代码语言:javascript
复制
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“面包屑”导航

代码语言:javascript
复制
 sequences <- read.csv(
    system.file("examples/visit-sequences.csv",package="sunburstR")
    ,header = FALSE
    ,stringsAsFactors = FALSE
  )[1:200,]

(1)

代码语言:javascript
复制
  sund2b(sequences,
    breadcrumbs = sund2bBreadcrumb(
    enabled = FALSE
    #是否启用面包屑导航
      ))

(2)

代码语言:javascript
复制
  #更改面包屑导航内容
  sund2b(sequences,
    breadcrumbs = sund2bBreadcrumb(
      #定制面包屑导航的内容
      html = htmlwidgets::JS("
function(nodedata, size, percent) {
return '<span style=\"font-weight: bold;\">' + nodedata.name + '</span>' + ' ' + size
}
")
   )
  )

05

sund2bTooltip d2b工具提示的高级定制

代码语言:javascript
复制
 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对于直观的展示多维分组变量很有优势,既方便又美观,并且提供交互式。可以直接输出图片形式或网页,很好用哦!

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

本文分享自 作图丫 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档