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
相关产品推荐
相关产品推荐

