亲测可用,R语言 ggplot2 箱线图线条控制参数详解,箱线图离散数值控制

您遇到的"加粗的断断续续的线条"很可能是指箱线图的须线 (whiskers) 及其末端的 staple(箱线图两端的小横线)。要控制这些线条的显示,关键在于一系列以 whisk 和 staple 开头的参数。

下表为您整理了所有与这些"离散线条"相关的参数,方便您进行精细控制:

📊 箱线图线条控制参数详解

参数 功能说明 常用取值及效果

whisklty 控制须线的线型。您已设置为 0,这能彻底隐藏须线。 0 或 "blank":隐藏须线

1 或 "solid":实线

2 或 "dashed":虚线

3 或 "dotted":点线

whisklwd 控制须线的粗细。 数值,默认通常为 1。数值越大,线条越粗。

whiskcol 控制须线的颜色。您已设置为 "gray90"。 颜色名称(如"red")或十六进制码(如#FF0000)。

staplewex 控制staple(箱线图两端的小横线) 的长度。 数值,默认为 0.5 左右。数值越大,横线越长。设置为 0 可彻底隐藏它。

staplecol 控制staple 的颜色。您已设置为 "gray90"。 颜色名称或十六进制码。

staplelty 控制staple 的线型。 同 whisklty,可取 0(隐藏)、1(实线)等。

staplelwd 控制staple 的粗细。 数值,同 whisklwd。

💡 解决方案与代码调整

根据上表,要彻底去除这些线条,最直接的方法是同时隐藏须线(whisker)和 staple。在您已有代码的基础上,请添加 staplewex = 0:

bp <- boxplot(expr_matrix,

main = "",

xaxt = "n",

border = 1,

outline = FALSE,

las = 2,

col = group_colors[groups],

ylab = "",

cex.axis = 0.7,

median.lty = 1,

median.col = "gray90",

--- 关键修改:控制须线和末端横线 ---

whisklty = 0, # 隐藏须线

whiskcol = "gray90",

staplewex = 0, # 将末端横线长度设为0,从而隐藏它

staplecol = "gray90",

staplelty = 1,

--- 离群点控制 ---

outcol = "gray90",

outbg = "gray90",

outpch = NA

)

🧩 参数调整逻辑说明

• whisklty = 0:这个设置已经能确保须线(从箱体延伸出去的直线) 被隐藏。

• staplewex = 0:这个参数是解决问题的关键。它设置了箱体两端横向短线的长度。将其设为 0,这些短线长度就为零,从而在视觉上消失。

🌟 更进一步

如果您只是想改变这些线条的样式而非完全隐藏(比如将断续线改为细实线),可以这样设置:

whisklty = 1, # 须线改为实线

whisklwd = 0.5, # 须线变细

staplewex = 0.3, # 保留短线,但设置较短长度

staplelty = 1, # 短线改为实线

staplelwd = 0.5 # 短线变细

bash 复制代码
# 1. 绘制箱线图:保留彩色填充、中位线、箱体框框,隐藏原始离群点(用实线替代)
# 保存箱线图结果用于提取离群点坐标
# 新增xlim参数减少左右空白;新增outpch=NA避免离群点残留黑圈
bp <- boxplot(expr_matrix,        # 待绘图数据矩阵/数据框
              main = "",               # 不显示默认标题(后续用 mtext 自定义)
              xaxt = "n",              # 去掉 x 轴的样本名称(刻度+标签)
              border = 1,              # 显示箱体边框(黑色框框)
              outline = FALSE,         # 隐藏原始离群点(核心修改:不再显示点)
              las = 2,                 # 轴刻度标签垂直于轴(竖排,易读)
              col = group_colors[groups], # 按分组向量给箱体填充颜色
              ylab = "",               # y 轴标题留空
              cex.axis = 0.7,          # 坐标轴刻度数字缩小到 0.7 倍
              whisklty = 1,            # 须线线型:实线
              median.lty = 1,          # 中位线线型:实线
              median.col = "gray90",   # 中位线:深灰  gray30 ≈ 30% 白 → 深灰
              whiskcol   = "gray90",   # 须线:深灰
              staplecol  = "gray90",    # 末端横线:深灰        
              outcol  = "gray90",    #  ------ 离群点的边框色
              outbg  = "gray90",    #   ------ 离群点的填充色(仅对 pch=21:25 有效)
              # ylim = c(-.2, 0.8),     # y轴范围设置
              # 新增:调整x轴范围减少左右空白(根据箱体数量自适应)
              # xlim = c(20, 150),      #55个数据集
              # --- 以下是针对须线的关键修改 ---
              #  那些加粗、断断续续的线条
              whisklty = 0,             # 设置为 0 或 "blank" 以彻底隐藏须线 
              whisklwd = 0,
              whiskcol = 0,             #  控制须线的颜色。您已设置为 "gray90"
              staplewex =0,             # 控制staple(箱线图两端的小横线) 的长度
              # 新增:强制离群点点型为NA,避免残留黑圈  
              outpch = NA             
)          

# 2. 提取离群点坐标,用实线标记(每个离群点位置画垂直实线)
if (length(bp$out) > 0) {  # 仅当存在离群点时绘制
  for (i in seq_along(bp$out)) {
    x_pos <- bp$group[i]  # 离群点对应的x轴位置(箱体编号)
    y_pos <- bp$out[i]    # 离群点的y值
    # 绘制垂直实线:x方向宽度0.08(控制实线长度),y方向固定为离群点位置
    segments(x0 = x_pos - 0.04,  # 实线左端点x
             x1 = x_pos + 0.04,  # 实线右端点x(总长度0.08)
             y0 = y_pos,         # 实线下端点y
             y1 = y_pos,         # 实线上端点y(垂直于x轴)
             #col = "gray90",            # 实线颜色(与箱体线条一致:黑色)
             lwd = 1,            # 实线粗细
             lty = 1)            # 确保是实线(lty=1为实线,默认也是实线)
  }
}

# 3. 自定义左上角标题(抬高)
mtext("Combined Datasets Before Normalization", # 标题文本
      side = 3,              # side=3 表示在图形上方(top)
      line = 1.5,            # line 控制与边缘距离,越大越抬高
      adj = 0,               # adj=0 左对齐,实现"左上角"效果
      cex = 1.2,             # 字体放大 1.2 倍
      font = 2)              # 粗体

# 4. 图例:置于图框外顶部中央,无边框,色块间加宽
legend("top",                # 图例位置:顶部中央
       legend = levels(groups), # 分组名称向量
       fill   = group_colors,   # 对应色块填充色
       title  = "",             # 图例主标题留空
       xpd    = TRUE,           # 允许在图形区域外绘图
       horiz  = TRUE,           # 水平排列色块
       cex = 0.8,               # 字体0.8 倍
       inset  = c(0, -0.12),    # 负值向下移出图框,微调使贴边
       bty    = "n",            # 去掉图例边框(background type = none)
       pt.cex = 5,              # 色块大小放大
       x.intersp = 1.8)         # 色块/文字间水平间隔

希望这份详细的参数列表和调整建议能帮助您完美地定制箱线图的外观!如果还需要其他帮助,请随时提出。

相关推荐
yzx9910132 小时前
国庆科技感祝福:Python 粒子国旗动画
开发语言·人工智能·python
迪丽热爱2 小时前
【练】C程序设计-01程序设计和C语言
c语言·开发语言
扶尔魔ocy2 小时前
【QT常用技术讲解】opencv实现摄像头图像检测并裁剪物体
开发语言·qt·opencv
偷光4 小时前
浏览器中的隐藏IDE: Elements (元素) 面板
开发语言·前端·ide·php
DKPT4 小时前
JVM栈溢出和堆溢出哪个先满?
java·开发语言·jvm·笔记·学习
Rock_yzh7 小时前
AI学习日记——参数的初始化
人工智能·python·深度学习·学习·机器学习
gopyer8 小时前
180课时吃透Go语言游戏后端开发6:Go语言的循环语句
开发语言·游戏·golang·循环语句
青衫客369 小时前
基于 Python 构建的安全 gRPC 服务——TLS、mTLS 与 Casbin 授权实战
python·安全·微服务
-dzk-10 小时前
【3DGS复现】Autodl服务器复现3DGS《简单快速》《一次成功》《新手练习复现必备》
运维·服务器·python·计算机视觉·3d·三维重建·三维