2011-10-26 25 views

回答

27

这里是由子集划分数据的另一种方法:

ggplot(mtcars, aes(mpg, disp)) + facet_wrap(~cyl) + 
    geom_point(data = subset(mtcars, cyl == 4)) + 
    geom_line(data = subset(mtcars, cyl == 6)) + 
    geom_text(data = subset(mtcars, cyl == 8), aes(label = gear)) 

enter image description here

+4

可以通过使用子集'=简化代码位(CYL == 4)',而不是使用'data'调用。 – Ramnath

+0

优秀!我经常忘记子集的论点......谢谢。 – kohske

2

这里有5组(g)的一些样本数据。我们在第五个方面需要不同的几何类型。注意创建两个不同版本的y变量的技巧,一个用于前四个方面,另一个用于第五个方面。

dfr <- data.frame(
    x = rep.int(1:10, 5), 
    y = runif(50), 
    g = gl(5, 10) 
) 
dfr$is.5 <- dfr$g == "5" 
dfr$y.5 <- with(dfr, ifelse(is.5, y, NA)) 
dfr$y.not.5 <- with(dfr, ifelse(is.5, NA, y)) 

如果不同的geoms可以使用相同的美学(如点和线),那么这不是问题。

(p1 <- ggplot(dfr) + 
    geom_line(aes(x, y.not.5)) + 
    geom_point(aes(x, y.5)) + 
    facet_grid(g ~ .) 
) 

但是,线条图和条形图需要不同的构面,因此它们不能按预期工作。

(p2 <- ggplot(dfr) + 
    geom_line(aes(x, y.not.5)) + 
    geom_bar(aes(y.5)) + 
    facet_grid(g ~ .) 
) 

在这种情况下,最好是画两个独立的图表,也许他们Viewport结合起来。

相关问题