R语言对数箱线图优化:刻度、散点叠加及样式调整求助
对数箱线图优化方案
以下是贴合你现有代码逻辑的base R实现方案,完全满足你的三个需求:
核心实现步骤
1. 自定义对数刻度
通过yaxt="n"关闭默认y轴,再用axis()手动指定刻度位置与显示标签,既保留对数坐标的缩放逻辑,又能精准展示0.001、0.01、0.1、1等关键节点。
2. 叠加散点图
使用stripchart()添加散点,通过jitter参数避免点重叠,设置合适的颜色与大小增强数据可读性。
3. 自定义样式
- 用
grid()添加指定粗细、颜色的网格线 - 用
box()重绘边框,自定义样式 - 直接在
boxplot()或通过title()添加轴标题
完整可运行代码
# 加载数据 box <- structure(list(CD = c(0.291998350286, 58.4266839332, 1.27227891359, 7.05106388302, 0.000175203165079, 14.5665189804, 0.991317477169, 1.56817217741, 30.4733699427, 0.421737157934, 1.42372160368, 0.333712081068, 0.126643859356, 0.339337851064, 0.151788605996, 3.81711532569, 1.54344215823, 17.2540240816, 3.67548135199, 4.08331544672, 0.0549081111653, 0.0734888395127, 5.16751927204, 22.6971132167, 1.04321972985, 0.184343635879, 2.29291935133, 0.0555342051937, 0.411328596454, 51.3157360015), WD = c(0.402162969955, 0.189544929529, 0.000840280055822, 0.0501429051167, 3.4853343866, 0.0286017538011, 0.0121948073037, 0.992426638872, 0.0192559537415, 0.00398698494632, 0.888543226817, 0.703331842713, 0.378008558951, 4.70639786908, 0.113706495683, 1.32546254378, 0.936899368015, 0.108969215053, 0.25593198462, 0.564518000036, 0.121389166752, 0.195884521759, 0.704964462359, 1.25602965005, 0.0242662609253, 2.11883481514, 0.44581781826, 0.659586439033, 0.36869665263, 0.824802234027), MC = c(0.0817800846374, 1.70562818122, 0.0807325401412, 0.180484111266, 0.0438908620273, 8.75617400342, 0.479370274286, 0.908307567192, 2.81446961622, 0.0699990348088, 0.0491805903311, 0.00573142245572, 0.116352754956, 0.311847695137, 0.0414215549125, 0.104499713126, 0.0551723673287, 0.076199002014, 0.191940770942, 4.11745930602, 1.75751348869, 0.0517694407553, 2.29459310871, 0.0269233884783, 0.097992042257, 11.7325079183, 0.262543381616, 0.748125397347, 0.635821595694, 0.794256126423), WC = c(0.0686062258206, 0.514240129693, 7.68226019254, 4.36776848419, 0.618214352027, 2.13911888244, 0.0392505689889, 0.0823059942863, 2.36466448826, 0.0688590035687, 0.151457824484, 0.260629997743, 8.30460664472, 0.235838508742, 0.41960151168, 4.38818043685, 0.0797918590848, 0.109025596179, 0.0837286212892, 0.0117251770506, 1.17739717792, 0.207413909376, 8.62180088733, 2.33021344099, 0.166981061366, 1.13410263425, 0.0905601584251, 0.154075808752, 0.140498581833, 0.213863468391), MWC = c(301.891645135, 0.672405306137, 0.105110378336, 5.36947765018, 0.672138277335, 3.58296467263, 10.7754596083, 5.01795685162, 0.0775842457366, 1.07683084271, 1.0360624974, 16.8763517534, 0.390002867544, 1.50618637339, 0.371973397842, 1.28366689573, 0.0633246500391, 0.0364964802158, 0.249895194073, 0.0379084221473, 0.0798275709535, 0.504735639066, 8.12262202509, 82.5787360252, 0.068574731873, 8.76779568117, 0.00873932360562, 0.0142029221366, 0.0228083224849, 0.146073745479)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -30L)) # 绘制箱线图,关闭默认y轴 boxplot(box, varwidth = TRUE, log = "y", las = 1, yaxt = "n", # 关闭默认y轴 xlab = "分组", # x轴标题 ylab = "数值", # y轴标题 border = "darkgray" # 初始边框颜色,后续将重绘 ) # 自定义y轴刻度 axis(side = 2, at = c(0.001, 0.01, 0.1, 1, 10, 100, 1000), labels = c("0.001", "0.01", "0.1", "1", "10", "100", "1000"), las = 1) # 添加散点图,用jitter避免点重叠 stripchart(box, method = "jitter", vertical = TRUE, add = TRUE, pch = 16, # 散点形状 col = "#E63946", # 散点颜色 cex = 0.8) # 散点大小 # 添加y方向网格线:粗细1,浅灰色 grid(nx = NA, ny = NULL, lwd = 1, col = "#F1FAEE") # 重绘边框:粗细2,深灰色 box(lwd = 2, col = "#457B9D")
关键细节说明
- 刻度设置:
at参数对应对数坐标的实际数值位置,labels设置显示的文本,确保覆盖数据的最小值(0.000175)和最大值(301) - 散点叠加:
stripchart的add=TRUE表示在已有图上添加,jitter参数随机偏移点位置,避免密集点重叠 - 样式自定义:
grid()的nx=NA表示不添加x方向网格,ny=NULL自动匹配y轴刻度;box()重绘整个图的边框,覆盖默认样式
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

