ggplot2堆叠百分比条形图如何将Y轴起始值设为10%而非0%
实现方法
仅需修改原代码中scale_y_continuous()的参数,其余代码完全无需改动,即可实现Y轴起始值调整为10%的需求,核心逻辑是保留轴范围外的原始值避免堆叠计算错误,仅截断Y轴显示区间。
- 将原代码里的
scale_y_continuous行替换为如下内容:
scale_y_continuous(expand = c(0, 0),labels = scales::percent, limits = c(0.1, 1), oob = ~.x)
参数说明:
limits = c(0.1, 1)指定Y轴显示范围为10%~100%,oob = ~.x表示保留超出轴范围的原始数值,避免ggplot默认将范围外值标记为缺失值,导致堆叠条形高度计算错误。
- 修改后完整可运行代码如下:
library(ggplot2) library(reshape2) library(ggh4x) data <- data.frame(col1=c("Sample1","Sample2","Sample3","Sample4","Sample5","Sample6"), col2=c(0.5,0.1,0.4,0.05,0.05,0.9), col3=c(0.6,0.1,0.3,0.1,0.1,0.8), col4=c(0.5,0.3,0.2,0.05,0.15,0.8), col5=c("a","a","a","b","b","b"), col6=c("c","c","c","c","c","c")) data2 <- melt(data) ggplot(data=data2, aes(x = variable, y = value, fill=col1))+ geom_bar(position="stack", stat="identity")+ scale_fill_manual(values=c("#e6194B","#ffe119","#f58231","#911eb4","#42d4f4","#bfef45")) + # 仅修改了本行参数 scale_y_continuous(expand = c(0, 0),labels = scales::percent, limits = c(0.1, 1), oob = ~.x) + facet_nested(~col6 + ~col5, scales = "free_x",space = "free_x",switch = "x") + ggtitle("Title") + theme_classic() + theme(strip.text.y = element_text(angle=0),legend.position = "right", legend.key.size = unit(0.4, 'cm'), axis.line = element_line(colour = "black"), axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1), strip.placement = "outside", strip.background = element_rect(color = "white", fill = "white"), axis.title = element_blank()) + guides(fill=guide_legend(title=NULL, ncol = 1)) + xlab("X axis") + ylab("Y axis")
- 效果说明:修改后Y轴刻度从10%起始,堆叠百分比比例、嵌套分面、配色、主题等所有其他元素与原代码输出效果完全一致,仅隐藏0%~10%区间的显示内容,和Excel中修改坐标轴最小值的表现完全一致。
内容的提问来源于stack exchange,提问作者Thend
相关产品推荐
相关产品推荐

