2016-06-08 2 views
2

Я пытаюсь создать несколько линейных графиков с помощью ggvis. Я могу построить несколько строк, но я не могу добавить подсказку для этих строк. Мне нужно показать значения x и y, когда я наводил курсор мыши на линии. Я также не могу добавить точки в строки в цикле for.Несколько графиков линий в ggvis, использующих для цикла

Ниже приведен упрощенный пример, с которым я работаю. столбец «c1» это значения х и столбцы «c2», «c3» и «c4» должны быть нанесены (линии с точками и подсказке) Screenshot of the plot

mydf <- data.frame(c(1:10),c(11:20), c(21:30), c(31:40)) 
v <- c("c1","c2","c3", "c4") 
names(mydf) <- v 
myggv <- mydf %>% ggvis(x = ~c1, y = ~c2) %>% layer_lines() %>% layer_points() %>% add_tooltip(function(mydf){paste0("x:",mydf$c1,"<br>","y:",mydf$c2)}, "hover") 
for(r in v[2:length(v)]){ 
myggv <- (myggv %>% layer_paths(x = ~c1, y = as.name(r)) %>% layer_points() 
%>% add_tooltip(function(mydf){paste0("x:",mydf$c1,"<br>","y:",mydf[,r])}, "hover")) 
} 

Благодарности

ответ

0

Лучший подход здесь не использовать цикл for. Я имею в виду, вы можете, но это не так, как ggvis подходит к вещам. Кроме того, я не могу получить подсказку для работы в цикле (это дает только правильный результат для последней добавленной строки Но вот как я бы сделал это Anway:.

mydf <- data.frame(c1 = c(1:10), 
        c2 = c(11:20), 
        c3 = c(21:30), 
        c4 = c(31:40)) 
myggv <- ggvis(mydf) 
for (r in names(mydf)[-1]) { 
    myggv <- (myggv %>% 
       layer_paths(x = ~c1, y = as.name(r)) %>% 
       layer_points(x = ~c1, y = as.name(r)) %>% 
       add_tooltip(function(mydf) { 
       paste0("x:", mydf[[1]], "<br>", "y:", mydf[[r]])}, "hover")) 
} 

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

mydf2 <- tidyr::gather(mydf, 'var', 'val', -c1) 

myggv2 <- mydf2 %>% 
    ggvis(x = ~c1, y = ~val) %>% 
    layer_points() %>% 
    add_tooltip(function(d) { paste0("x:", d$c1, "<br>", "y:", d$val) }, "hover") %>% 
    group_by(var) %>% 
    layer_paths() 

Вы можете использовать layer_lines() вместо layer_paths()

.

enter image description here

+0

Hi Axeman, благодарю вас за ответ. У меня есть следующий вопрос. – user98180

+0

Так задайте новый вопрос? – Axeman

+0

Hi Axeman, спасибо за ваш ответ. У меня есть следующий вопрос. Я хочу покрасить каждую из линий, зависящих от имени columan, например: c2 = «синий, c3 =« синий », c4 =« красный ». Не могли бы вы посоветовать мне, как подойти к этому. новый для ggvis, и это меня сильно запутало. – user98180

Смежные вопросы