5

样本数据:

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()
4

2 回答 2

7

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

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

在此处输入图像描述

您可以删除对数据的引用,它将被推断:

df %>% ggvis(~x,~y1) %>% layer_paths()%>%
+     layer_paths(x = ~x, y = ~y2)
于 2014-07-25T00:49:07.340 回答
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()
  )
于 2015-04-24T09:49:17.967 回答