【问题标题】:R [raster] : How to use a raster layer to determine transparency of another layer?R [raster]:如何使用光栅层来确定另一层的透明度?
【发布时间】:2015-03-09 13:47:28
【问题描述】:

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

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)

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

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

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

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

【问题讨论】:

  • 两个想法。 1)plot下半部分alpha=1,然后设置par(new=TRUE)plot上半部分(坐标设置适当)alpha=.5。 2)将您的栅格数值数据转换为八进制颜色,例如#FF0000 并添加定义透明度的两个尾随数字,例如FF000088 是 50%
  • @user7417 你还需要这个答案还是你已经知道了?我想我可以在这里帮忙..
  • @Shekeine:我在 Tom Hengl 的“地统计制图实用指南”(ISBN 978-90-9024981-0)一书中找到了第 5.6.1 章“不确定性的可视化”,并应用了一种他称之为的技术'美白'。但是,非常欢迎替代方法....我很想知道您有哪些建议!

标签: r plot raster alpha-transparency


【解决方案1】:

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() 表示不确定性透明度

您可以调整这两者,让图表看起来最适合您的数据。

【讨论】:

    【解决方案2】:

    使用当前版本的 'raster',您可以使用矢量或 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-12
      • 2021-09-16
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      相关资源
      最近更新 更多