如何使用ggvis将多个图形放在一个图中

时间:2014-07-25 00:35:57

标签: r ggvis

样本数据:

y1 = c(1,2,3,4)
y2 = c(6,5,4,3)
x  = c(1,2,3,4)
df = data.frame(x,y1,y2)

我的问题:

我想使用ggvis

将以下两个图组合成一个
df %>% ggvis(~x,~y1) %>% layer_paths()
df %>% ggvis(~x,~y2) %>% layer_paths()

但是,以下情况不起作用:

df %>% ggvis(~x,~y1) %>% layer_paths() %>% ggvis(~x,~y2) %>% layer_paths()

2 个答案:

答案 0 :(得分:7)

您可以参考原始数据并添加图层:

df %>% ggvis(~x,~y1) %>% layer_paths()%>%
  layer_paths(data = df, x = ~x, y = ~y2)

enter image description here

您可以删除对数据的引用,并推断出来:

df %>% ggvis(~x,~y1) %>% layer_paths()%>%
+     layer_paths(x = ~x, y = ~y2)

答案 1 :(得分:2)

可以通过将每个组件合并在一起来合并两个ggvis:

p1 <- df %>% ggvis(~x,~y1) %>% layer_paths()
p2 <- df %>% ggvis(~x,~y2) %>% layer_paths()

pp <- Map(c, p1, p2) %>% set_attributes(attributes(p1))

我不知道它是否适用于所有情况,但它至少适用于简单的情节。

这是一个可以为你完成的功能:

merge_ggvis <- function(...) {
  vis_list <- list(...)
  out <- do.call(Map, c(list(`c`), vis_list))
  attributes(out) <- attributes(vis_list[[1]])
  out
}

您可以将其用于包含绘图的对象:

merge_ggvis(p1, p2)

或在管道中:

df %>%
  ggvis(~x, ~y1) %>% layer_paths() %>%
  merge_ggvis(
    df %>% ggvis(~x, ~y2) %>% layer_paths()
  )