2016-06-08 59 views
2

我想用ggvis創建多個線圖。我可以繪製多行,但我無法爲這些行添加工具提示。當我將鼠標懸停在線上時,我需要顯示x和y值。我也無法爲for循環中的行添加點。在ggvis中使用for循環的多線圖

下面是我正在使用的簡化示例。列「C1」是x值和列「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接近事物的方式。此外,我不能得到的提示在循環工作(它賦予了只在最後添加的行正確的結果,但這裏是我會怎麼做安韋:

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

嗨Axeman,謝謝你的回答。我有一個後續問題。 – user98180

+0

那麼問一個新的問題? – Axeman

+0

Hi Axeman,謝謝你的回答。我有一個後續問題。 我想根據columan的名字爲每一行添加不同的顏色,例如:c2 =「blue,c3 =」blue「,c4 =」red「,請指導我如何解決這個問題。新的ggvis,它讓我感到困惑了很多。 – user98180