使用for循环的ggvis中的多条线图

Multiple line graphs in ggvis using for loop

我正在尝试使用 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"))
}

谢谢

此处最好的方法是不使用 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()