【问题标题】:Overlay percentage in barplot with correct scale with ggplot使用 ggplot 以正确比例覆盖条形图中的百分比
【发布时间】:2015-06-23 16:17:15
【问题描述】:

我正在尝试使用ggplot 将百分比叠加到条形图上。我尝试过失败的方法:

  1. 使用 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。
  • 我对这个答案写了长篇评论,希望能在一定程度上澄清一些事情。

标签: r ggplot2


【解决方案1】:

在这里回答我自己的问题:

我必须映射 y 值。为了获得一致的百分比,我还必须将标签值乘以 100。

p <- ggplot(data, aes(x = factor(data[[variable1]]) ), environment = environment() )
p <- p + geom_bar(aes(y = ..count../sum(..count..)), position = modo)
p <- p + scale_y_continuous(labels = percent_format())
p <- p + stat_bin( aes(y = ..count../sum(..count..), label = paste(  round( 100 * ..count../sum(..count..)), "%" ) ), vjust = -0.2, geom ="text" ) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2019-09-05
    • 2016-04-26
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多