You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何仅绘制箱线图的lowess平滑线,隐藏箱线图?

只保留lowess平滑线,隐藏箱线图的解决方案

你遇到的问题是boxplot()默认会绘制箱线图,所以即使后续添加了lowess线,箱线图也会保留。这里有两种简单的解决思路:

方法1:让boxplot只计算统计量,不绘图

利用boxplot()plot = FALSE参数,它会返回箱线图的统计结果但不渲染图形,之后我们手动创建绘图区域并添加lowess线:

# 获取箱线图统计量,但不绘制箱线图
du <- boxplot(Q ~ Duration, plot = FALSE)

# 创建空的绘图框架(type="n"表示只画坐标轴,不画数据点)
plot(
  x = du$names, 
  y = du$stats[3,], 
  type = "n", 
  xlab = "Duration", 
  ylab = "Median Q"
)

# 添加lowess平滑线
lines(lowess(du$stats[3,], f = 1/5))

方法2:直接计算分组中位数,跳过boxplot

如果你的核心需求是对每个Duration分组的中位数做lowess平滑,完全可以不用boxplot(),直接用tapply()计算中位数后绘图:

# 计算每个Duration分组的中位数(自动忽略NA)
group_medians <- tapply(Q, Duration, median, na.rm = TRUE)

# 将分组名称转为数值(方便lowess处理)
duration_values <- as.numeric(names(group_medians))

# 创建绘图框架
plot(
  x = duration_values, 
  y = group_medians, 
  type = "n", 
  xlab = "Duration", 
  ylab = "Median Q"
)

# 添加lowess平滑线
lines(lowess(duration_values, group_medians, f = 1/5))

额外说明

  • 你原来的代码中boxplot()默认plot = TRUE,所以会先画出箱线图,这就是为什么两种图形同时显示的原因。
  • 如果Duration是连续变量(而非分类分组),其实可以直接对原始数据做lowess,不需要分组:
    # 先创建空绘图框架
    plot(Duration, Q, type = "n", xlab = "Duration", ylab = "Q")
    # 添加原始数据的lowess平滑线
    lines(lowess(Duration, Q, f = 1/5))
    

内容的提问来源于stack exchange,提问作者user195366

火山引擎 最新活动