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()
答案 0 :(得分: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)
答案 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()
)