Сортировка JavaScript для графика SunburstR - PullRequest
0 голосов
/ 16 мая 2018

Я недавно обновил свой пакет SunburstR в R до версии 2.0, и внезапно сортировка фрагментов (по размеру, по убыванию, по часовой стрелке) не происходит автоматически, как раньше.Кто-нибудь из экспертов R & JS / d3.js поможет мне реализовать пользовательскую функцию сортировки JS или скажет, как решить проблему?Для целей воспроизведения:

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)

Функция солнечных лучей предоставляет параметр sortFunction, где можно написать собственный JS, например:

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

Спасибо!

PS результат: Not sorted

Как это выглядело раньше (обратите внимание на порядок срезов):

Sunburst в более ранних версиях

1 Ответ

0 голосов
/ 28 июня 2018

Возможно, этот пример сортировки по алфавиту поможет.

В качестве другого примера, вот как мы можем отсортировать каждый узел от наибольшего к наименьшему числу.

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.

screenshot of json data

screenshot of node data

Это можетполезно установить debugger в sortFunction и открыть виджет с инструментами разработчика в Chrome и Firefox, чтобы увидеть, с чем вы работаете.

...