R [raster]:如何使用栅格图层来确定另一个图层的透明度?

时间:2015-03-09 13:47:28

标签: r plot raster alpha-transparency

让我们假设我有两个栅格图层,一个是给定区域中给定物种的估计丰度之一,另一个是估计值的一定程度的不确定性。为了简单起见,我使用了一个非常简单的例子,产生了下面的两张图(左:丰富,右:不确定)。

library(raster)
par(mfrow = c(1,2))
par(mar = c(5.1, 4.1, 4.1, 5.1))
abund <- matrix(1:16, 4)
abund.r <- raster(abund)
plot(abund.r, col = colorRampPalette(c("red", "blue"), space = "rgb")(16))
uncert <- matrix(c(rep(0.2, 8), rep(0.8, 8)), 4, byrow = TRUE)
uncert.r <- raster(uncert)    
plot(uncert.r)

Example maps for the given code

在这个例子中,该地区北部的估计不如南部的估计。我正在寻找在一张地图中结合丰富和不确定性的可能性。我想通过使用与左图中相同的颜色来显示不确定性,并根据右图中的不确定性值修改网格中每个单元的透明度。因此,北部的丰度估计应该比南部的估计更加透明(不太确定)(更确定)。但是,alpha参数只接受单个值,例如:

plot(MAT1.r, col = colorRampPalette(c("red", "blue"), space = "rgb")(16),
     alpha = 0.5)

当我尝试使用矢量时,只使用它的第一个元素。

我的问题:如何使用不确定性图中的信息来修改丰度图中的透明度?我们非常感谢任何有关替代方法的解决方案或建议的暗示。

2 个答案:

答案 0 :(得分:2)

无论何时您希望通过数据可视化进行更多努力,

ggplot2都是非常有资源的。考虑一下:

library(raster)
library(ggplot2)

abund.r <- raster(matrix(1:16, 4))
uncert.r <- raster(matrix(c(rep(0.2, 8), rep(0.8, 8)), 4, byrow=T))

#Layer the two rasters into one multi-band raster for easier manipulation
abu_unc <- stack(abund.r, uncert.r)

#Get cell positions in cartesian coordinates for each cell
coords <- xyFromCell(object=abu_unc, cell=1:ncell(abu_unc))

#abu_unc is a 2 layer raster where band 1==abundance and band 2==uncertainty
#Convert abu_unc () to a dataframe
abu_unc_df <- as.data.frame(abu_unc)

#Add cell coordinates 
dat <- data.frame(coords, abu_unc_df)
colnames(dat) <- c("x", "y","Abundance", "Uncertainty")

#Plot dat, where the fill is abundance and transparency (alpha), is the respective uncertainty value
mymap <- ggplot(data=dat) + theme_bw() + coord_equal() +
 geom_raster(aes(x=x, y=y, fill=Abundance, alpha=Uncertainty)) +

  scale_alpha_continuous(range=c(0.4, 1), breaks=seq(0.4, 1, 0.1))+
  scale_fill_gradient2(mid="yellow", high = "darkgreen")+
  scale_x_continuous(expand=c(0.01,0.01)) + 
  scale_y_continuous(expand=c(0.01,0.01)) +

  #General aesthetics
  theme(
    axis.title.x = element_text(size=12),
    axis.title.y = element_text(size=12, angle=90),
    axis.text = element_text(size=10),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank()
  )
    print(mymap)

#Save plot to file
    ggsave(filename = "mymap.png", plot= mymap, dpi=300)

请注意使用:

  • scale_fill_gradient2()自定义丰富填充
  • scale_alpha_continous()了解不确定性透明度

您可以摆弄这两个图,让图表看起来像您认为最适合您的数据。

enter image description here

答案 1 :(得分:1)

使用当前版本的&#39; raster&#39;,您可以使用矢量或RasterLayer来设置透明度(alpha)

library(raster)
abund.r <- raster(matrix(1:16, 4))
uncert.r <- raster(matrix(c(rep(0.2, 8), rep(0.8, 8)), 4, byrow = TRUE))    

plot(abund.r, col=colorRampPalette(c("red", "blue"), space="rgb")(16), alpha=uncert.r)