facet_wrap中变量的函数

时间:2016-05-03 13:00:08

标签: r ggplot2

假设我有以下数据框:

df <- data.frame(x = sample(1:100,100,T),y = sample(1:100,100,T), z = rep(1:4,25))

所以看起来像这样

> head(df,10)
    x  y z
1  57 65 1
2  78 29 2
3  22 49 3
4  61 67 4
5   8 95 1
6  46 13 2
7  32 70 3
8  21 87 4
9  66 76 1
10 90 81 2

假设我想制作一个多面图,使用z作为分类变量:

plot <- ggplot(df, aes(x, y)) + geom_point()
plot + facet_wrap(~z)

上面的代码实际上完成了这项工作并制作了一个有4个方面的情节。但是,如果我需要制作一些实验图,例如,将z等于1,或者将2放在一个面上,将其他点放到第二个点,该怎么办?我的第一个想法是

plot + facet_wrap(~(z<3))

并返回错误:

  

layout_base(data,vars,drop = drop)出错:     至少一个图层必须包含用于刻面的所有变量

因此,据我所知,这个分类变量应该出现在数据框中。这个问题可以修复,例如通过以下方式:

ggplot(mutate(df, v = (z < 3)), aes(x, y)) + geom_point() + facet_wrap(~v)

但它比以前的版本便宜得多。特别是当plot非常复杂时。 我想知道为什么我们不能使用变量函数进行分面,而它允许进行映射。第二个问题是,也许有人看到了一个更好的方法,而不是我用mutate制作的方法。

0 个答案:

没有答案