#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. Я не уверен, что понимаю. Вы хорошо справляетесь с этим или ищете что-то еще? Я буду рад показать альтернативные решения.