R ggplot:仅当满足某些条件时才打印图层
R ggplot:仅当满足某些条件时才打印图层,r,ggplot2,R,Ggplot2,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")
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")
基本上,我有一个图表,其中某些东西只有在满足特定标准的情况下才能显示,而现在,我正在使用上面的技巧来完成这项工作,它让我夜不能寐,我的灵魂慢慢地死于我所造成的混乱。不用说,任何帮助都将不胜感激
编辑
恐怕我的例子太简单了。基本上,给定ggplot(data=…)
,如何添加这些层,都使用绑定到ggplot obj的数据:
ggplot(数据=子集(虹膜,物种==“setosa”),…)
或ggplot(数据=过滤器(虹膜,物种==“setosa”)
显然,层现在接受一个函数作为数据参数,所以您可以使用它
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)
pick%过滤器(条件)
}
ggplot(鸢尾,aes(x=萼片宽度,y=萼片长度,种))+
几何点(尺寸=4,形状=4)+
几何点(数据=拾取(~Species==“setosa”),颜色=“红色”)+
几何点(数据=拾取(~物种=“花色”),形状=5)
典型的选择通常是在层内使你的状态成为一种美学,可能是在你自己设置比例的时候。例如,geom_点(aes(color=Species==“setosa”)+scale_color_手册(values=c(“黑色”、“红色”))
。另一种选择是使用你的数据子集,比如geom_点(data=subset(鸢尾,种类=“刚毛”),大小=1,形状=5)
@lukeA子集
解决方案与过滤器
解决方案有何不同?@DavidRobinson请查看我的编辑。从某种意义上说,这看起来仍然像是一种黑客行为,我并没有告诉ggplot仅对满足特定标准的数据应用特定的东西,而是我只是将数据分成两组并将其样式化em不一样。你所谓的黑客可能基本上是一种方式。如果它工作得很好,你为什么需要其他选择?:)完美。正是我想要的。谢谢巴蒂斯特!非常好的答案,特别是因为ggplot2 v2+不再支持非官方的(即未记录的)subset
参数为每个层筛选数据。请参阅。鉴于过滤器已被弃用,今后可能需要执行以下操作:pick%filter(!!enquo(条件))}
。如果使用这一习惯用法,则必须从对pick
调用中的列的引用中删除波浪号。是否有一种方法可以在不使用pick
例程的情况下执行此操作?
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)