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

ggplot2如何在坐标翻转图表的x轴下方添加自定义标签次坐标轴

实现方案说明

由于coord_flip场景下单个连续坐标轴最多只能在绘图区上下边缘生成两个平行轴,无法直接在更靠外侧的位置生成第三个平行轴,因此采用 刻度对齐的手动文本标签+预留边距 的方式实现,对齐精度远高于普通注释方案,完全匹配现有轴的刻度位置。

完整可运行代码

# 原有数据处理逻辑保留
df_ebf <- df_ebf %>%
  map_df(rev)

labels.minor <- c("nie","selten","manchmal", "mehrmals", "oft", "sehr oft", "immerzu")

# 创建辅助轴的对齐数据框
# 水平位置与现有底部轴的0-6刻度完全匹配,垂直位置设置在绘图区下边缘外侧
aux_axis_df <- data.frame(
  break_pos = c(0, 1, 2, 3, 4, 5, 6),
  x_pos = -1, # 可根据实际类别数量微调位置距离
  label = labels.minor
)

ggplot(data=df_ebf, aes(x=forcats::fct_inorder(Skalen), y=Werte, group="")) +
  geom_line(color = "#003560") +
  geom_point(color = "#003560") +
  # 添加辅助轴文本标签
  geom_text(
    data = aux_axis_df,
    aes(x = x_pos, y = break_pos, label = label),
    hjust = 0.5, vjust = 1, size = 3.5
  ) +
  # (可选)添加辅助轴刻度短线,完善轴视觉效果
  geom_segment(
    data = aux_axis_df,
    aes(x = 0.5, xend = 0.2, y = break_pos, yend = break_pos),
    color = "black", linewidth = 0.5
  ) +
  coord_flip() +
  labs(x="EBF-Skalen") +
  scale_y_continuous(
    limits = c(0, 6), 
    breaks = c(0,1,2,3,4,5,6), 
    sec.axis = dup_axis(),
    expand = c(0,0)
  ) +
  scale_x_discrete(expand = c(0,0)) +
  theme(
    panel.grid.major.y = element_blank(),
    panel.grid.minor.x = element_blank(),
    axis.line.x = element_line(size = 1, colour = "black", linetype=1),
    axis.title=element_blank(),
    # 预留底部边距,避免标签被截断
    plot.margin = margin(t = 10, r = 10, b = 60, l = 10)
  )

可调参数说明

  • x_pos:控制辅助轴与绘图区的垂直距离,默认分类轴的绘图区下边缘为0.5位置,数值越小(如-1.2)辅助轴离绘图区越远,数值越大(如-0.8)距离越近
  • plot.margin的第四个参数:控制画布底边距大小,可根据辅助轴的距离和标签长度调整,保证所有文本完整显示
  • 可选的geom_segment刻度线模块:不需要刻度线可以直接删除该部分代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 14:36:03