是否有一种在 ggplot
内过滤的方法?也就是说,我想这样做
p <- ggplot(iris, aes(x = Sepal.Width, y = Sepal.Length, species)) +
geom_point(size = 4, shape = 4) +
geom_point(size = 1, shape = 5 # do this only for data that meets some condition. E.g. Species == "setosa")
我知道我可以使用hacks,例如Species != "setosa"
设置size = 0或重置如下所示的数据,但是这些都是黑客攻击。
p <- ggplot(iris, aes(x = Sepal.Width, y = Sepal.Length, species)) +
geom_point(size = 4, shape = 4) +
geom_point(data = iris %>% filter(Species == "setosa"), colour = "red") +
geom_point(data = iris %>% filter(Species == "versicolor"), shape = 5)
基本上,我有一个图表,只有满足某个标准时才会显示某些事物,而现在,我正在使用上面的黑客来完成这个并且它让我夜不能寐,我的灵魂慢慢死去我创造的烂摊子。不用说,非常感谢任何帮助!
修改
我担心我的例子可能过于简单化了。基本上,给定ggplot(data = ...)
,我如何使用绑定到ggplot obj的数据添加这些图层:
Critera#1和#2可以是任何东西。例如。仅标记异常点。仅用红色绘制超出特定范围的那些点等。
我不想要
ggplot(data=subset(iris, Species=="setosa"),...)
或ggplot(data=filter(iris,Species=="setosa")
。答案 0 :(得分:7)
显然,图层现在接受一个函数作为数据参数,因此您可以使用
pick <- function(condition){
function(d) d %>% filter_(condition)
}
ggplot(iris, aes(x = Sepal.Width, y = Sepal.Length, species)) +
geom_point(size = 4, shape = 4) +
geom_point(data = pick(~Species == "setosa"), colour = "red") +
geom_point(data = pick(~Species == "versicolor"), shape = 5)