首页 > 解决方案 > SunburstR 图的 Javascript 排序

问题描述

我最近将 R 中的 SunburstR 包更新到 2.0 版本,突然切片的排序(按大小、降序、顺时针)不会像以前那样自动发生。有任何 R & JS/d3.js 专家帮助我实现自定义 JS sortFunction 或说如何解决问题?用于复制目的:

library(jsonlite)
library(sunburstR)
b = read.csv(
   file = paste0(
   "https://gist.githubusercontent.com/rileycrane/",
   "92a2c36eb932b4f99e51/raw/",
   "a0212b4ca8043af47ec82369aa5f023530279aa3/visit-sequences.csv"
 ),header=FALSE
,stringsAsFactors = FALSE
)

sequence_json <- jsonlite::fromJSON(
  system.file("examples/visit-sequences.json",package="sunburstR"),
  simplifyDataFrame = FALSE
)
sunburst(sequence_json)

sunburst 函数提供了一个 sortFunction 参数,可以在其中编写自定义 JS,例如:

sunburst(df,
     # create a trivial sort function
     sortFunction = htmlwidgets::JS('function(x) {return x;}'))

谢谢!

PS结果: 未排序

它过去的样子(注意切片的顺序):

早期版本中的森伯斯特

标签: javascriptrd3.jssunburst-diagram

解决方案


也许这个按字母顺序排序的例子会有所帮助。

另一个例子,这里是我们如何从最大到最小对每个节点进行排序。

library(sunburstR)

sequence_json <- jsonlite::fromJSON(
  system.file("examples/visit-sequences.json",package="sunburstR"),
  simplifyDataFrame = FALSE
)

sunburst(
  sequence_json,
  sortFunction = htmlwidgets::JS(
    "
function(a,b) {
  // sort by count descending
  //   unlike the other example using data.name, value is at the top level of the object
  return b.value - a.value
}
"    
  )
)

大多数属性将成为前缀.data

json数据截图

节点数据截图

在 sortFunction中设置 adebugger并使用 Chrome 和 Firefox 中的开发人员工具打开小部件以查看您正在使用的内容可能会有所帮助。


推荐阅读