使用ggplot绘制带有%和百分比标签的直方图

3

我想使用ggplot制作一个百分比直方图。我找到了一篇相关答案, 但只解决了部分问题。

我还想在每个直方图柱顶部放置一个标签,显示实际的百分比。

以下是我的代码和输出链接:

p <- ggplot(mtcars, aes(x = hp)) +  
        geom_bar(aes(y = (..count..)/sum(..count..)), binwidth = 25) + 
        ## scale_y_continuous(labels = percent_format()) #version 3.0.9
        scale_y_continuous(labels = percent) #version 3.1.0
p <- p + stat_bin(aes(label=round((..count..)/sum(..count..),2)), geom="text", size=4)
plot(p)

这是输出结果:image 不幸的是,您可以看到数据标签放置在非百分比位置,并且条形图被“压缩”了。
有没有办法更改stat_bin参数,使文本标签实际上显示在百分比条形图内部或立即顶部(以便我的条形图不被压缩)?
谢谢!
2个回答

2
您需要将标签的y值设置为相同的区间,并注意使用与条形图相同的分组。
library(scales)
p <- ggplot(mtcars, aes(x = hp)) +  
        geom_bar(aes(y = (..count..)/sum(..count..)), binwidth = 25) + 
        scale_y_continuous(labels = percent_format()) #version 3.0.9
        ##scale_y_continuous(labels = percent) #version 3.1.0
p <- p + stat_bin(aes(y=(..count..)/sum(..count..), 
    label=round((..count..)/sum(..count..),2)), 
    geom="text", size=4, binwidth = 25, vjust=-1.5)
plot(p)

太好了。谢谢你。我没有意识到你可以在标签值之外指定 y 值。再次感谢。 - pdanese

0

当使用binwidth参数的geom_bar()时,您将会收到以下错误:

geom_bar()不再具有binwidth参数。请改用geom_histogram()

我通过包含geom_histogram()并使用paste0函数将要显示的值显示为百分比(而不是分数),修改了MrFlick的代码。

library(scales)
p <- ggplot(mtcars, aes(x = hp)) +  
  geom_histogram(aes(y = (..count..)/sum(..count..)), binwidth = 25) +
      stat_bin(aes(y=(..count..)/sum(..count..), 
             label=paste0(round((..count..)/sum(..count..)*100,1),"%")), 
             geom="text", size=4, binwidth = 25, vjust=-1.5)
plot(p)

{{链接1:输出:}}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接