【发布时间】:2015-09-21 10:17:25
【问题描述】:
这个想法是在函数中修补对 ggplot 的调用。
例子:
library(dplyr)
library(ggplot2)
library(lazyeval)
df <- data.frame(A=letters[1:10], B=2:11, C=3:12))
func <- function(name, dat=df) {
output <- dat %>%
select_(~A,name) %>%
arrange_(interp(~desc(var), var=as.name(name)))
plot <-
ggplot(output, aes_string(x=reorder(~A,-name), y=B)) +
geom_bar(stat='identity')
print(plot)
return(plot)
}
result <- func("B")
编译给出:
-name 错误:一元运算符的参数无效。
我试过deparse 和substitute。不确定我得到了正确的组合。有任何想法吗?
【问题讨论】:
-
我不确定
reorder在这里的用途是什么——看起来你正试图针对不匹配的A绘制B。这不是一个好主意,我认为 ggplot 不支持它。 -
@@Konrad:请参阅之前的question 了解
reorder解决的问题。 -
啊,我明白了,这是有道理的。但是,解决这个问题很简单,不是吗?只需在
ggplot调用之外重新排序因子即可。 -
我试过 :-) 无济于事,到目前为止。关心分享一个方法吗?谢谢
-
是的,结果比我想象的要难。无论如何,看看我的答案。