我正在尝试使用ggvis创建多个折线图。我可以绘制多行,但我无法为这些行添加工具提示。当我将鼠标悬停在线上时,我需要显示x和y值。我也无法在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 :(得分: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()
。