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

使用baseR绘制散点图时趋势线不显示的问题排查

问题原因及解决方法

你的判断没错,x轴设置为对数刻度是趋势线不显示的核心原因,同时代码里还有几个小问题需要修正:

1. 核心问题:对数轴与线性回归的不匹配

你用log='x'把x轴转换成了对数刻度,但abline(gem_wortels ~ IAA_M)是基于原始的IAA_M数值做线性回归,这条直线对应到对数轴上会严重偏离可视区域;再加上IAA_M包含0(log(0)为负无穷),会导致回归结果异常,最终无法在图中显示。

2. 代码中的其他问题

  • 你引用的data_wortelgroei_regressie数据集未在代码中定义,当前变量都是单独的向量,无需指定这个参数。
  • stdev_wortels变量未定义,需要补充标准差数据才能正常运行箭头误差线。

修正后的代码

# 补充标准差数据(替换为你的真实数据)
stdev_wortels <- c(0.5, 0.3, 0.4, 0.2, 0.6, 0.3)
IAA_M <- c(0, 1E-3, 1E-5, 1E-7, 1E-9, 1E-11)
gem_wortels <- c(7.71, 2.275, 6.34285, 4.71666, 8.36666, 4.822222)

# 绘制散点图(x轴对数刻度)
plot(
  IAA_M,
  gem_wortels,
  ylim = range(c(gem_wortels - stdev_wortels, gem_wortels + stdev_wortels)),
  pch = 19,
  xlab = "[IAA] (M)",
  ylab = "gemiddelde wortellengte (cm)",
  log = 'x'
)

# 添加误差线
arrows(
  IAA_M,
  gem_wortels - stdev_wortels,
  IAA_M,
  gem_wortels + stdev_wortels,
  length = 0.05,
  angle = 90,
  code = 3
)

# 基于对数转换后的x做线性回归,再绘制趋势线
# 排除IAA_M=0的点(log(0)无意义)
valid_idx <- IAA_M != 0
model <- lm(gem_wortels[valid_idx] ~ log10(IAA_M[valid_idx]))
abline(model, lty = 3, col = 'red')

关键修正点说明

  • 排除IAA_M=0的点:对数转换对0无效,必须去掉该点才能做有效的对数线性回归。
  • 使用log10(IAA_M)作为回归自变量:让回归模型适配对数刻度的x轴,确保趋势线能正确显示在图中。
  • 先通过lm()生成回归模型再传入abline():保证趋势线的计算逻辑和绘图的坐标系统一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:40:18