2015-07-08 2 views
7

Я использую пакет большие dygraphs для R (https://rstudio.github.io/dygraphs/)Как я могу масштабировать точки в Dygraphs?

Мой код по праву сейчас:

james<-mtcars[c("mpg","drat")] 
james$date<-seq(from=as.Date("2013-05-16"),to=as.Date("2013-06-16"),by="days") 
x <- xts::xts(james$mpg, order.by = james$date) 
p <- dygraphs::dygraph(x, main = "mpg over time", xlab = "Date", ylab = "mpg") %>% 
    dygraphs::dyRangeSelector() %>% 
    dyOptions(drawPoints = TRUE, pointSize = 2) 
p 

Я хочу, чтобы масштабировать размер точек в р по james$drat, а не иметь его зафиксировано на уровне 2.

Как это сделать?

ответ

1

Я думаю, что библиотека javascript dygraphs не имеет возможности варьировать размер точки в каждой серии. Простым решением является создание одной серии для каждого размера точки.
Скажем, мы хотим 5 разных точечных размеров, варьирующихся от james$drat. Во-первых, мы создаем Binned переменную со значениями 1-5, в зависимости от значения drat:

drat_binned <- cut(james$drat, breaks=5, labels=1:5) 

Затем мы создаем 5 копий переменной у сюжета (в james$mpg):

james_new_variables <- matrix(rep(james$mpg, 5), nrow=nrow(james)) 

для номера столбца 1 мы сохраняем только значения mpg, где drat_binned равно 1, и соответственно для столбцов с номером 2-5. Переменные затем добавляются к исходному набору данных:

for (i in 1:5) 
    james_new_variables[drat_binned != i, i] <- NA 
james <- data.frame(james, james_new_variables) 

Затем мы делаем новое dygraph исходной переменной плюс новые переменные (по умолчанию называется X1-X5):

x <- xts::xts(james[,c("mpg","X1","X2","X3","X4","X5")], order.by = james$date) 
p <- dygraphs::dygraph(x, main = "mpg over time", xlab = "Date", ylab = "mpg") %>% 
    dygraphs::dyRangeSelector() %>% 
    dySeries("mpg") %>% 
    dySeries("X1", color="blue", drawPoints = TRUE, pointSize = 2) %>% 
    dySeries("X2", color="blue", drawPoints = TRUE, pointSize = 3) %>% 
    dySeries("X3", color="blue", drawPoints = TRUE, pointSize = 4) %>% 
    dySeries("X4", color="blue", drawPoints = TRUE, pointSize = 5) %>% 
    dySeries("X5", color="blue", drawPoints = TRUE, pointSize = 6) %>% 
p 

Не очень элегантный, но вроде работ. Единственное, что показывает трюк, это легенда, которая становится испорченной ярлыками X1-X5.

3

Я знаю, что это старый вопрос, но я нашел потенциальное решение, используя drawPointCallback. Я надеюсь, что это поможет кому-то. Вы можете выбрать шкалу как в R, так и в JavaScript, если вы не хотите использовать необработанный номер.

library(dygraphs) 

james<-mtcars[c("mpg","drat")] 
james$date<-seq(from=as.Date("2013-05-16"),to=as.Date("2013-06-16"),by="days") 
x <- xts::xts(james$mpg, order.by = james$date) 
p <- dygraphs::dygraph(x, main = "mpg over time", xlab = "Date", ylab = "mpg") %>% 
    dygraphs::dyRangeSelector() %>% 
    dyOptions(drawPoints = TRUE) 
p %>% 
    dyCallbacks("drawPointCallback" = sprintf(
    " 
function(g, name, ctx, canvasx, canvasy, color, radius, index) { 
    var drat = %s; 
    radius = drat[index]; 
    return Dygraph.Circles.DEFAULT(g, name, ctx, canvasx, canvasy, color, radius) 
} 
", 
    jsonlite::toJSON(mtcars$drat) 
    ) 
) 
Смежные вопросы