无法找到答案 - 在ggplot2中,是否可以在列的函数上进行分析,而不是直接对列的值进行分析?
简单可重复的例子:
样本数据:
df=data.frame(dat=c(1,2,5,5,7))
Run Code Online (Sandbox Code Playgroud)
这有效:
ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) +
geom_point() + facet_grid(dat ~ .)
Run Code Online (Sandbox Code Playgroud)
这不是:
ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) +
geom_point() + facet_grid((dat > 3) ~ .)
Run Code Online (Sandbox Code Playgroud)
一种解决方案是为方面添加一列.这有效:
df$facet=df$dat>3
ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) +
geom_point() + facet_grid(facet ~ .)
Run Code Online (Sandbox Code Playgroud)
但有没有办法在不必向data.frame添加新列的情况下执行此操作?
我提出了一个折衷的解决方案,这是评论部分中发布的 @Nathan 和 @\xd0\xafaffael 的参数之间的权衡。
\n\nFacetingFunction <- function(df) {df$dat > 3}\nArbitraryFacetingPlot <- function(df, FacetingFunction) {\n df$facet <- FacetingFunction(df)\n p <- ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) + \n geom_point() + \n facet_grid(facet ~ .)\n df$facet <- NULL\n p\n}\n\nArbitraryFacetingPlot(df, FacetingFunction)\nArbitraryFacetingPlot(df, function(df) {df$dat==5})\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |