R语言绘图:如何对齐图例表格(矩阵)内的文本与线条
R 绘图矩阵式图例精准对齐方案
错位原因
legend()函数默认给所有图例项预留固定宽度的线段绘制位,即便设置lty=0不画线,该空位也不会自动消除,直接导致两个问题:
- 顶部
long label 1/long label 2为纯文本,前方空出线段位,和下方同列彩色线条错位 - 第一列
T=1/T=2/T=3为纯文本,前方空出线段位,出现多余左侧空隙
原错位效果:
修正代码
通过统一线段长度、按项调整文本水平偏移抵消预留空位即可:
plot(1,type="n",col=2) legend_order <- matrix(1:12,ncol=3,byrow = TRUE) # 按矩阵映射规则生成图例属性序列 lab_vec <- c("","long label 1","long label 2", "T=1","","", "T=2","","", "T=3","","")[legend_order] lty_vec <- c(0,0,0,0,1,1,0,1,1,0,1,1)[legend_order] col_vec <- c(0,0,0,0,2,5,0,3,6,0,4,7)[legend_order] legend("topright", ncol = 3, legend = lab_vec, lty = lty_vec, col = col_vec, seg.len = 1.2, # 统一线条长度,可按需调整 # 核心逻辑:不画线的纯文本项左移,抵消预留的线段空位 x.intersp = ifelse(lty_vec == 0, -0.8, 1) )
微调技巧
- 觉得线条过长/过短,直接调整
seg.len数值,数值越大线条越长 - 纯文本仍偏右,就把
x.intersp中的负值往小调(比如从-0.8改为-0.9);纯文本太靠左溢出,就把负值往大调(比如改为-0.7) - 调试时可给
legend()加bty = "o"参数显示图例边框,更方便观察对齐边界
内容的提问来源于stack exchange,提问作者AlexLee
相关产品推荐
相关产品推荐

