Многобарная диаграмма rCharts nvd3

#r #shiny #nvd3.js #rcharts

#r #блестящий #nvd3.js #rcharts

Вопрос:

Меня интересует построение событий JVM GC с использованием тонких вертикальных полос с использованием nvd3 и rCharts. Пример данных выглядит следующим образом. Затраченное время указано в секундах.

 Event         Date         TimeTakenforEvent

FullGC        1/1/2014        10
GCType1       1/1/2014        30
GCType2       1/1/2014        60
GCType3       1/1/2014        20
GCType4       1/1/2014        70
 

События будут динамически добавляться в R фрейм данных по мере их возникновения. Диаграмма является накопительной, но каждый тип события приведет к отображению полосы определенного цвета. Так, например, полные события GC будут отображать синие полосы. Дата отображается по оси x, а затраченное время отображается по оси y.

Я знаю, как использовать R и добавлять данные в фрейм данных. Итак, это вопрос о функции построения диаграммы rChart.

Я думаю, что решение может быть примерно таким

 p2$chart(color = "#! function(d){ return d.y > 12 ? 'red':'blue'} !#")
p2$chart(color = "#! d3.selectAll('rect.nv-bar').style('fill', function(d, i){return d.y > 12 ? 'red':'blue;}  !#")
 

Может кто-нибудь подсказать мне?

Обновление: я определил, что этот пример кода работает.

 p2 = nPlot(x = "Var1", y = "Freq", data = bpf3, type = "discreteBarChart")
p2$chart(color = "#! function(d){ return d.Freq > 12.0 ? 'red':'blue'} !#")
 

Но «Событие» — это то, что определяет цвет в моем случае.

Ответ №1:

Я сделал некоторые предположения, и я думаю, что понимаю результат, которого вы хотели бы достичь. Дайте мне знать, если что-то подобное сработает. Он использует d3 d3.scale.ordinal для преобразования типа события в цвет. Если вам нужны дополнительные сведения, ознакомьтесь с этим руководством по масштабированию d3. Дайте мне знать, как это работает для вас.

   require(rCharts)

  bpf3 <- data.frame(
    Var1 = rep(1:20),
    Freq = round(runif(20,1,20)),
    Event = unlist(lapply(1:5,function(x){rep(LETTERS[x],4)}))
  )

  p2 = nPlot(x = "Var1", y = "Freq", data = bpf3, type = "discreteBarChart")
  p2$chart(
    color = "#! function(d){
      var ourColorScale = d3.scale.ordinal().domain(['A','B','C','D']).range(['red','blue','green','purple']);
      return ourColorScale(d.Event);
    }!#")
  p2
 

Комментарии:

1. Это работает. Я добавил цвет и получил к нему доступ следующим образом, но ваша функция, похоже, является стандартной. p2$chart(color = "#! function(d, x){ var color = d.Var1; return color.split(':')[1];} !#")

2. Я не уверен, что понимаю. Вы хорошо справляетесь с этим или ищете что-то еще? Я буду рад показать альтернативные решения.