在R,apg包中的SoilProfileCollection中绘制贡献分数

时间:2018-05-28 15:40:20

标签: r soil

我无法在深度图中显示贡献分数,因为它们在每个10cm深度处的顶部数字应该是黑色而第二个是蓝色而不是像现在显示的那样交替每个深度步骤。

enter image description here

到目前为止,这是我的代码:

idx_veg <- which(a$LU == 'Vegetated LU')
veg <- slab(a[idx_veg, ], fm= ~ TOC + TIC + Clay + Silt + Sand + Nitrogen..)
idx_mod <- which(a$LU == 'Moderately Degraded LU')
mod <- slab(a[idx_mod, ], fm= ~ TOC + TIC + Clay + Silt + Sand + Nitrogen..)
#combine with the collection-wide aggregate data
g <- make.groups(veg=veg, mod=mod)
xyplot(top ~ p.q50 | variable, groups=which, data=g, ylab='Depth [cm]',
   xlab='median bounded by 25th and 75th percentiles',
   lower=g$p.q25, upper=g$p.q75, ylim=c(60,-2), #ylim defines the y-axis depth
   panel=panel.depth_function,
   alpha=0.15, sync.colors=TRUE, #alpha = transparency of 25-75% interval
   par.settings=list(superpose.line=list(col=c('black', 'RoyalBlue'), lwd=1, lty=c(1,2))), #median line, colour and width
   prepanel=prepanel.depth_function,
   cf=g$contributing_fraction, cf.col=c('black', 'RoyalBlue'), cf.interval=10, #contributing fractions (right hand side x-axis)
   layout=c(6,1), strip=strip.custom(bg=grey(0.8)), #Layout = arrangement of panels of plots
   scales=list(x=list(tick.number=4, alternating=3, relation='free')),# x, y-axis
   auto.key=list(columns=2, lines=TRUE, points=FALSE)
)

我需要处理的警告以及可能导致问题严重的警告是:

In if (is.na(cf.col)) { ... :
the condition has length > 1 and only the first element will be used

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

在这种情况下,警告非常有用。函数xyplot()具有检查NA参数中的任何cf.col值的代码。在您的情况下,您在函数调用中指定了cf.col=c('black', 'RoyalBlue'),因此代码告诉您NA检查仅在第一个元素上执行,在您的情况下是black值。

if(is.na(c(-2,NA,2))) print("hi")
# Warning:
In if (is.na(c(-2, NA, 2))) print("hi") :
  the condition has length > 1 and only the first element will be used

hi未打印,因为第一个值-2不是NA,因此条件失败。

但是,请考虑以下示例:

if(is.na(c(NA,NA,2))) print("hi")
[1] "hi"
Warning message:
In if (is.na(c(NA, NA, 2))) print("hi") :
  the condition has length > 1 and only the first element will be used

注意这次第一个元素是NA,因此条件的计算结果为true,随后打印hi

您使用的函数xyplot()可能期望一个值而不是向量,因此is.na()实现。如果我是作者,我会在is.NA调用之前添加一个额外的代码来检查它是否是长度为2及以上的向量,并返回适当的建议,或使用anyNA函数或许多其他等价物:

if(anyNA(c(NA,NA,2))) print("hi")
[1] "hi"

没有警告!

希望这能回答你的问题!