You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 09:37:32