R中泰勒图xlim与ylim调整问题及多图同刻度实现
解决泰勒图刻度放大及多图一致问题
错误原因
你遇到的formal argument "xlim" matched by multiple actual arguments错误,是因为taylor.diagram函数内部会根据数据标准差自动计算xlim和ylim范围,你手动传入的xlim/ylim参数和函数内部的默认参数重复冲突了。
解决方案
要实现放大刻度且多个泰勒图刻度完全一致,核心是统一控制图的最大标准差范围,而非手动传入xlim/ylim:
- 先计算所有需要绘图的数据集(观测数据+所有模拟数据)的标准差,取最大值作为统一基准:
# 计算观测数据的标准差(含NA值时加na.rm=TRUE) obs_sd <- sd(obst, na.rm = TRUE) # 计算当前模拟数据的标准差 mod_sd <- sd(MOHCREMO2015, na.rm = TRUE) # 若有多个模拟模型,将所有模型的标准差纳入计算 # mod_sds <- c(sd(model1), sd(model2), sd(model3), ...) # max_sd <- max(obs_sd, mod_sds) # 取观测与当前模拟数据的最大标准差 max_sd <- max(obs_sd, mod_sd)
- 调用
taylor.diagram时,用maxsd参数替代手动的xlim/ylim,函数会自动基于maxsd计算轴范围(默认乘以1.1),同时保证多图刻度一致:
oldpar <- taylor.diagram(obst, MOHCREMO2015, ref.sd = TRUE, grad.corr.lines = c(-0.2,-0.4,-0.6,-0.8,-0.9,-0.95,-0.975, -0.99,-1,0.2,0.4,0.6,0.8,0.9,0.95,0.975,0.99,1), col = "darkgreen", pch = 3, show.gamma = TRUE, xlab = "", ylab = "Standard Deviation", main = "Swallendam", maxsd = max_sd)
- 生成多个刻度一致的泰勒图时,只需在每个
taylor.diagram调用中传入同一个max_sd值,所有图的轴范围会完全统一。
内容的提问来源于stack exchange,提问作者Pearl
相关产品推荐
相关产品推荐

