假设我有以下数据框:
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
制作的方法。