我有一些数据,我想使用stat_count()
中的一些变量来标记条形图。
这就是我想要做的事情:
library(ggplot2)
library(scales)
percent_and_count <- function(pct, cnt){
paste0(percent(pct), ' (', cnt, ')')
}
ggplot(aes(x=Type)) +
stat_count(aes(y=(..prop))) +
geom_text(aes(y=(..prop..), label=percent_and_count(..prop.., ..count))),
stat='count')
然而,我得到了这个错误,因为它无法找到我假设的功能是基本包或数据框:
eval(expr,envir,enclos)出错:找不到函数&#34; percent_and_count&#34;
如果我percent(..prop..)
,我也会收到此错误,尽管scales::percent(..prop..)
没问题。我没有从包中加载我的函数。
如果一切都失败了,我可以做到
geom_text(aes(y=(..prop..), label=utils::getAnywhere('percent_and_count')$objs[[1]]((..prop..),(..count..))))
但这对于应该是一项愚蠢的简单任务来说似乎是不必要的迂回。
答案 0 :(得分:1)
您可以使用bquote
和aes_
:
# Sample data
set.seed(2017);
df <- data.frame(
Type = sample(6, 100, replace = T)
);
library(ggplot2);
library(scales);
# Your custom function
percent_and_count <- function(pct, cnt){
paste0(percent(pct), ' (', cnt, ')')
}
ggplot(df, aes(x = Type)) +
stat_count(aes(y = ..prop..)) +
geom_text(
stat = "count",
aes_(
y = ~(..prop..),
label = bquote(.(percent_and_count)((..prop..), (..count..)))))
说明:bquote(.(percent_and_count)(...))
确保找到percent_and_count
(在父环境中评估术语.(...)
)。然后,我们使用aes_
确保正确评估带引号的表达式(~
或bquote
)。
仍然不漂亮,但可能比使用utils::getAnywhere
更直接。