r - 如何在每个图例的条形图中绘制百分比标签?
问题描述
我正在尝试使用 ggplot 绘制geom_bar()
条形图,在 x 轴上有一个变量,在 Y 轴上有一个变量,第三个作为图例,在每个图例中,该图例占 Y 轴计数的百分比.
我使用内置mtcars
数据集作为代表。
library (ggplot2)
ggplot(data = mtcars, aes(x=cyl, y= ..count..)) +
geom_bar(aes(fill = factor(gear)))
如果可能的话,我希望以一种体面的方式在每个图例中包含这些百分比。
prop.table(table(eight$gear))
3 5
0.8571429 0.1428571
prop.table(table(six$gear))
3 4 5
0.2857143 0.5714286 0.1428571
prop.table(table(four$gear))
3 4 5
0.09090909 0.72727273 0.18181818
此处列出了此文档
但是我达到了不能将 y 作为标签的地步,因为我是从 ggplot 特殊的起始变量中获取它的。
很抱歉我不能上传图片,因为我是一个新手,没有足够的声誉来发布图片,但是运行 mtcars 代码会生成我想要的东西。
解决方案
我可能会分别格式化 % 标签,然后将它们作为第二个数据框添加到图表中。
使用 dplyr 格式化:
library(dplyr)
legendLabels <- mtcars %>%
group_by(cyl, gear) %>%
summarise(count = n()) %>%
arrange(cyl, desc(gear)) %>%
mutate(percent = round(count/sum(count)*100,2),
yPos = cumsum(count))
和更新的图表:
ggplot(data = mtcars, aes(x=cyl, y= ..count..)) +
geom_bar(aes(fill = factor(gear))) +
geom_text(data = legendLabels, aes(x=cyl, y=yPos-0.5, label=paste0(percent,"%")))
希望这是您正在寻找的。
推荐阅读
- bash - bash脚本js文件选择器
- javascript - angular4 与 jwplayer 集成不适用于 ie,但适用于 Chrome、Firefox、Edge
- python - 如何在管理站点中禁用多对多字段的数据
- node.js - 如何使用物化 css 设计 ejs 页面
- polymer - Polymer 2 计算绑定与 dom-repeat 中的嵌套函数
- json - 异步问题:从 Swift 调用 Web Api
- dynamics-365 - 插件注册中未显示自定义插件动态 365 v9
- google-cloud-platform - 谷歌云负载均衡器:internalForwardingRulesLimitsExceeded
- java - 如何在 Intellij IDEA 中为 Maven Web 应用程序重新加载 Java 类
- lucene - 在 Lucene 4.8.0 SearchManager.MaybeRefresh 或 DirectoryReader.openIfchange() 中不起作用