如何在ggplot2的镜像条形图之间居中显示Y轴分组标签?
解决方案
要实现分组标签居中在两个镜像条形之间,你可以通过隐藏原Y轴,然后在x=0的位置添加文本标签来实现,具体代码如下:
library(data.table) library(reshape2) library(ggplot2) # 构建数据(修正原代码中melt的对象错误) df <- data.table(group = c("A", "B", "C"), low = c(1, 2, 3), llarge = c(4, 5, 6)) df.melt <- melt(df, id.vars = "group", variable.name = "size", value.name = "quantity") # 转换为镜像数值 df.melt$size_val <- ifelse(df.melt$size == "low", -df.melt$quantity, df.melt$quantity) # 绘图 ggplot(df.melt, aes(y = group, x = size_val, fill = size)) + geom_col(stat = "identity", position = "identity") + # 在x=0位置添加分组标签 geom_text(aes(x = 0, label = group), color = "black", size = 4) + # 调整x轴范围,保证标签显示空间 scale_x_continuous(limits = c(-7, 7), breaks = seq(-6, 6, 2)) + # 隐藏原Y轴的文字和刻度 theme_minimal() + theme( axis.text.y = element_blank(), axis.ticks.y = element_blank(), axis.title.y = element_blank(), panel.grid.major.y = element_blank() ) + labs(x = "Quantity", fill = "Size", title = "Barplot of low and large")
关键改动说明
- 修正了原代码中
melt(DT)的错误,改为melt(df)(因为数据对象是df) - 将数值转换列重命名为
size_val,避免和原size列混淆 - 使用
geom_text在x=0的位置添加分组标签,替代原Y轴的文字 - 通过
theme设置隐藏原Y轴的刻度、文字和纵向网格线,让布局更整洁 - 调整
scale_x_continuous的范围,确保标签不会被条形遮挡
内容的提问来源于stack exchange,提问作者zhang
相关产品推荐
相关产品推荐

