使用 Terra 绘图时,alpha 参数无法按预期工作
Posted
技术标签:
【中文标题】使用 Terra 绘图时,alpha 参数无法按预期工作【英文标题】:alpha argument doesn't work as expected when plotting with Terra 【发布时间】:2021-10-14 14:03:31 【问题描述】:我正在尝试使用新的(ish)terra
R 包复制我在raster
中制作的情节,但terra::plot
中的alpha
参数似乎与它的工作方式不同在raster
。
我正在尝试使用 alpha 层来指示基础(彩色)层中的不确定性。下面是一些表明我的问题的简化代码。使用raster
包,alpha 层会根据每个单独像素的值更改透明度。使用 terra
时,这似乎不起作用。
我想我正在使用最新版本的terra
(1.3.4),并且我使用的是 Mac(版本 15.5.11)。
library(terra)
library(raster)
par(mfrow=c(1,2))
plot_cols<-terrain.colors(n=5)
## raster package
raster.template<-raster(xmn=1, xmx=5, ymn=1, ymx=5, nrows=5, ncols=5)
legend.ras.comm<-raster.template
legend.ras.comm[]<-rep(c(5,4,3,2,1), 5)
legend.ras.alpha<-raster.template
legend.ras.alpha[]<-rep(c(0.9,0.7,0.45,0.2,0), 5)
plot(t(legend.ras.comm), col=plot_cols, legend=FALSE, axes=FALSE, box=FALSE, main="Raster package")
plot(t(legend.ras.comm), col="#000000", alpha=legend.ras.alpha, add=TRUE, legend=FALSE)
## terra package
raster.template<-rast(xmin=1, xmax=5, ymin=1, ymax=5, nrows=5, ncols=5)
legend.ras.comm<-raster.template
legend.ras.comm[]<-rep(c(5,4,3,2,1), 5)
legend.ras.alpha<-raster.template
legend.ras.alpha[]<-rep(c(0.9,0.7,0.45,0.2,0), 5)
plot(t(legend.ras.comm), col=plot_cols, legend=FALSE, axes=FALSE, main="Terra package")
plot(t(legend.ras.comm), col="#000000", alpha=legend.ras.alpha, add=TRUE, legend=FALSE, axes=FALSE)
对此的任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:您现在可以使用 terra 1.3-22
进行此操作
我明白了,使用您的代码:
## raster package
library(raster)
legend.ras.comm <- raster(xmn=1, xmx=5, ymn=1, ymx=5, nrows=5, ncols=5, vals=rep(c(5,4,3,2,1), 5))
legend.ras.alpha <- setValues(raster.template, rep(c(0.9,0.7,0.45,0.2,0), 5))
legend.ras.comm <- t(legend.ras.comm)
## terra package
library(terra)
legend.ter.comm <- rast(legend.ras.comm)
legend.ter.alpha <- rast(legend.ras.alpha)
par(mfrow=c(1,2))
plot_cols <- terrain.colors(n=5)
plot(legend.ras.comm, col=plot_cols, legend=FALSE, axes=FALSE, box=FALSE, main="Raster package")
plot(legend.ras.comm, col="#000000", alpha=legend.ras.alpha, add=TRUE, legend=FALSE)
plot(legend.ter.comm, col=plot_cols, legend=FALSE, axes=FALSE, main="Terra package")
plot(legend.ter.comm, col="#000000", alpha=legend.ter.alpha, add=TRUE, legend=FALSE, axes=FALSE)
使用terra
,您还可以使用影响所有颜色的单个值
plot(legend.ter.comm, col=plot_cols, alpha=.75)
或者通过颜色改变透明度。像这样的:
plot_cols_alpha <- terrain.colors(n=5, alpha=seq(.75, 1, .05))
plot(legend.ter.comm, col=plot_cols_alpha)
【讨论】:
感谢您的帮助。这解决了我的问题,尽管我确实必须使用一种解决方法。在terra
中,如果存在 NA(即,如果您在陆地上绘制,则为海洋区域等),则无法按上述方式绘制 alpha 层。我设法让它在terra
中工作,方法是将 NA 重新分类为 1 alpha 掩码,使其完全透明。对于一个可重现的示例,在使用raster
创建层之后添加以下两行代码:legend.ras.comm <- extend(x=legend.ras.comm, y=c(1,1)) legend.ras.alpha <- extend(x=legend.ras.alpha, y=c(1,1))
NA
s的问题是开发版中已经解决的bug。您可以通过以下方式安装它:install.packages('terra', repos='https://rspatial.r-universe.dev')
以上是关于使用 Terra 绘图时,alpha 参数无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章