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

在共享Y轴且含正负值的patchwork图中添加geom_text的方法

给正负分栏柱状图添加精准定位的geom_text标签

要实现正负数值标签的准确定位,核心是根据柱子的正负方向调整标签的垂直位置(vjust)或y轴偏移量,确保标签清晰不被遮挡。以下是针对你的代码的修改方案:

修改p1图表(Schulform分栏图)

在原有代码基础上,分别给正负柱子添加geom_text:

p1 <- ggplot() +
  geom_col(
    data = data_schule_schulform,
    aes(fill = Herkunftsschulform, y = Anzahl, x = Schuljahr)
  ) +
  # 给正数值添加标签:放在柱子顶部外侧
  geom_text(
    data = data_schule_schulform,
    aes(y = Anzahl, x = Schuljahr, label = Anzahl),
    vjust = -0.3,  # 向上偏移,避免被柱子遮挡
    size = 3
  ) +
  geom_hline(yintercept = 0, color = "white", size = 1.5) +
  geom_col(
    data = data_2_schule_schulform,
    aes(fill = Schulform, y = Anzahl * -1, x = Schuljahr)
  ) +
  # 给负数值添加标签:放在柱子底部(靠近y=0一侧)外侧
  geom_text(
    data = data_2_schule_schulform,
    aes(y = Anzahl * -1, x = Schuljahr, label = Anzahl),
    vjust = 1.3,  # 向下偏移,靠近y=0方向
    size = 3
  ) +
  theme_minimal() +
  theme(
    legend.position = "none",
    axis.text.y = element_text(size = 8),
    axis.text.x = element_blank()
  ) +
  scale_y_continuous(limits = c(-max_oben, max_oben))

修改p3图表(Jahrgang分栏图)

同样的逻辑,给正负柱子添加标签:

p3 <- ggplot() +
  geom_col(
    data = data_schule_jahrgang,
    aes(fill = Jahrgang, y = Anzahl, x = Schuljahr)
  ) +
  # 正数值标签:柱子顶部外侧
  geom_text(
    data = data_schule_jahrgang,
    aes(y = Anzahl, x = Schuljahr, label = Anzahl),
    vjust = -0.3,
    size = 3
  ) +
  geom_hline(yintercept = 0, color = "white", size = 1.5) +
  geom_col(
    data = data_2_schule_jahrgang,
    aes(fill = Jahrgang, y = Anzahl * -1, x = Schuljahr)
  ) +
  # 负数值标签:柱子底部外侧
  geom_text(
    data = data_2_schule_jahrgang,
    aes(y = Anzahl * -1, x = Schuljahr, label = Anzahl),
    vjust = 1.3,
    size = 3
  ) +
  theme_minimal() +
  theme(
    legend.position='right',
    legend.justification = "center",
    legend.direction = "vertical",
    legend.text = element_text(size = 9.5),
    axis.text.y = element_text(size = 8),
    axis.text.x = element_blank()
  ) +
  scale_y_continuous(limits = c(-max_oben, max_oben))

调整说明

  • 如果希望标签放在柱子内部,可调整vjust值:正柱子用vjust = 1.2(柱子顶部内侧),负柱子用vjust = -0.2(柱子底部内侧)。
  • 若柱子高度较小,标签容易重叠,可给y值添加固定偏移,比如正柱子用y = Anzahl + 0.5,负柱子用y = Anzahl * -1 - 0.5,偏移量根据你的数据范围调整。
  • 标签大小可通过size参数修改,确保可读性。

plot_oben <- p1 | p3
#plot_unten <- p2 | p4
#plot <- plot_oben / plot_unten

内容的提问来源于stack exchange,提问作者Felix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 23:44:52