R ggplot2:柱函数上的刻面
找不到这个问题的答案——在ggplot2中,是否可以在列的函数上刻面,而不是直接在列的值上刻面 简单的可复制示例: 样本数据:R ggplot2:柱函数上的刻面,r,ggplot2,facet,R,Ggplot2,Facet,找不到这个问题的答案——在ggplot2中,是否可以在列的函数上刻面,而不是直接在列的值上刻面 简单的可复制示例: 样本数据: df=data.frame(dat=c(1,2,5,5,7)) 这项工作: ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) + geom_point() + facet_grid(dat ~ .) df$facet=df$dat>3 ggplot(df, aes(x=1:5, y
df=data.frame(dat=c(1,2,5,5,7))
这项工作:
ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) +
geom_point() + facet_grid(dat ~ .)
df$facet=df$dat>3
ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) +
geom_point() + facet_grid(facet ~ .)
这并不是:
ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) +
geom_point() + facet_grid((dat > 3) ~ .)
一种解决方案是只为facet添加一列。这项工作:
ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) +
geom_point() + facet_grid(dat ~ .)
df$facet=df$dat>3
ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) +
geom_point() + facet_grid(facet ~ .)
但是有没有一种方法不必在data.frame中添加新的列就可以做到这一点呢?我想出了一个折衷的解决方案,即在评论部分发布的@Nathan和@Яaffael的论点之间进行折衷
FacetingFunction <- function(df) {df$dat > 3}
ArbitraryFacetingPlot <- function(df, FacetingFunction) {
df$facet <- FacetingFunction(df)
p <- ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) +
geom_point() +
facet_grid(facet ~ .)
df$facet <- NULL
p
}
ArbitraryFacetingPlot(df, FacetingFunction)
ArbitraryFacetingPlot(df, function(df) {df$dat==5})
FacetingFunction 3}
ArbiraryFacetingPlot添加新列有什么问题?我更希望添加一个新列更快,因为它利用了原生R函数和向量化。我对添加一个新列的主要反感是它看起来不雅观。ggplot2可以通过一个因子的函数来处理着色——那么刻面呢?如果你想在一个factor的几个不同函数上这样做,但又不想用额外的列来扰乱你的数据帧,或者费心创建和删除它们,那该怎么办呢?我明白你的意思——我也去过——但最终这只是一个美容问题,如果你问我,尽管我很喜欢R,这是一种设计上不雅观的语言——它的目的是把工作做好,但不是优雅地完成。