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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:09:18