如何将ggplot2柱状图的y轴比例转换为百分比?
问题
我尝试创建一个y轴为百分比的柱状图,当前使用以下代码生成的图表y轴显示为比例,请问该如何修改?
ggplot(data = Access.Use,aes(fill=Access)) + geom_bar(aes(x=Access, y = (..count..)/sum(..count..)), fill="lightblue") + ylab("Proportion of Participants") + ylim(0,1) + xlab("Availability and Use") + theme_bw() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())
解决方法
以下几种方法可以快速将y轴从比例转换为百分比显示:
方法1:借助scales包格式化轴标签
先加载scales包,用scale_y_continuous替代原有的ylim,指定百分比格式的标签:
library(scales) ggplot(data = Access.Use,aes(fill=Access)) + geom_bar(aes(x=Access, y = (..count..)/sum(..count..)), fill="lightblue") + ylab("Proportion of Participants") + scale_y_continuous(labels = percent, limits = c(0,1)) + xlab("Availability and Use") + theme_bw() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())
方法2:直接计算百分比(无需额外包)
将y轴的比例值乘以100,同时调整轴标签和范围:
ggplot(data = Access.Use,aes(fill=Access)) + geom_bar(aes(x=Access, y = (..count..)/sum(..count..)*100), fill="lightblue") + ylab("Percentage of Participants") + ylim(0,100) + xlab("Availability and Use") + theme_bw() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())
方法3:使用ggplot2现代语法(推荐)
避免旧版的..count..语法,用stat_count配合after_stat计算比例,再添加百分比格式:
library(scales) ggplot(data = Access.Use,aes(x=Access, fill=Access)) + stat_count(aes(y = after_stat(prop), group = 1), fill="lightblue") + ylab("Proportion of Participants") + scale_y_continuous(labels = percent, limits = c(0,1)) + xlab("Availability and Use") + theme_bw() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())
注:group=1是为了确保计算的是整体数据的比例,而非每个x类别内的相对比例。
内容的提问来源于stack exchange,提问作者user20188476
相关产品推荐
相关产品推荐

