【发布时间】:2015-06-23 16:17:15
【问题描述】:
我正在尝试使用ggplot 将百分比叠加到条形图上。我尝试过失败的方法:
-
使用 geom_text:
p <- ggplot(data, aes(x = factor(data[[variable1]]) ), environment = environment() ) p <- p + geom_bar(aes(y = ..count../sum(..count..)), position = modo) p <- p + geom_text( aes(labels = ..count../sum(..count..)) , vjust = -0.2) p <- p + scale_y_continuous(labels = percent_format())
我收到错误消息:
eval(expr, envir, enclos) 中的错误:找不到对象“count”
按照here 的建议,我尝试了 stat_bin 函数,但是刻度被弄乱了,并且我丢失了条形(基于新的刻度,我猜它们仍然存在但不可见):
p <- ggplot(data, aes(x = factor(data[[variable1]]) ), environment = environment() )
p <- p + geom_bar(aes(y = ..count../sum(..count..)), position = modo)
p <- p + stat_bin( aes(label = ..count../sum(..count..) ) , vjust = -0.2, geom ="text" )
p <- p + scale_y_continuous(labels = percent_format())
这是我得到的:
关于如何解决这个问题的任何线索?
【问题讨论】:
-
我无法测试这是否是你的问题的原因,但你真的应该放弃使用
environment,而只使用aes_string()。 -
我在函数中使用这段代码。使用 'environment = environment()' 显然是避免出现某些变量的错误的唯一方法。看到这个:stackoverflow.com/questions/5106782/…
-
接受的答案很糟糕。阅读其他一些答案。基本上,您永远不应该在
aes()中使用除裸名之外的任何内容来引用变量。如果您需要以编程方式选择要绘制的变量,这就是aes_string()的用途。 -
哦,好的。我会试试。谢谢@joran。
-
我对这个答案写了长篇评论,希望能在一定程度上澄清一些事情。