0

使用“蒙版”功能根据多边形切割我的栅格后:

ras <- mask(ras0, polygon)

我想用 ggplot 呈现栅格(下面的链接)。但是,我对位于切割栅格之外的“NA”值有疑问。

https://depots.univ-perp.fr/get?k=9sh9zKXDpRTkVQslvJk

我在 "scale_fill_manual" 中添加了选项 na.value = "transparent" 以将 NA 值透明地放在我的地图上,但 NA 的图例始终存在!

  1. 如何删除图例中的文本“NA”和对应的灰色框?

  2. 是否有解决方案可以在使用“掩码”功能或使用“Writeraster”注册时单独删除 NA 值,以避免在使用 ggplot 显示时出现此问题?

这是用于显示地图的程序:

library(raster) 
ras<-raster("ras.tif")

# map
gplot(ras)+
  geom_tile(aes(fill=factor(value, labels=c("A", "B", "C", "D", "E", "F","G"))))+
  scale_fill_manual(values = c("red", "#22751a", "#48c665", "#d3d532", "#d78d0d", "#f6e600","#65d6ef"),
                    name= "Legend", na.value="transparent")+
  coord_cartesian(xlim = c(-7, 12),ylim = c(32, 38)) +
#bg
theme(panel.background = element_rect(colour = "black", fill="lightblue")) 

先感谢您

4

1 回答 1

2

似乎scale_fill_manual在使用因子时显示 NA 值。定义您真正想要显示的因素的一种方法是使用其他参数breakslabels对应向量。如果我使用您的代码,这将是:

# Vector of correspondence
cols <- c("A" = "red", "B" = "#22751a", "C" = "#48c665",
          "D" = "#d3d532", "E" = "#d78d0d", "F" = "#f6e600","G" = "#65d6ef")

# plot
gplot(ras) +
geom_tile(aes(fill=factor(value, labels=c("A", "B", "C", "D", "E", "F","G"))))+
  scale_fill_manual(values = cols,
                    breaks = c("A", "B", "C", "D", "E", "F","G"),
                    labels = c("A", "B", "C", "D", "E", "F","G"),
                    name= "Legend") +
  coord_cartesian(xlim = c(-7, 12),ylim = c(32, 38)) +
theme(panel.background = element_rect(colour = "black", fill="lightblue")) 

但是,您可以以另一种方式使用它,同时将栅格的值(作为字符)直接归因于特定颜色然后命名(我必须添加新颜色,因为您的栅格中有 8 个级别):

# Vector of correspondence
cols.nb <- c("0" = "blue", "1" = "red", "2" = "#22751a", "3" = "#48c665",
          "4" = "#d3d532", "5" = "#d78d0d", "6" = "#f6e600", 
          "7" = "#65d6ef")
# Plot
gplot(ras) +
geom_tile(aes(fill = as.character(value))) +
  scale_fill_manual(values = cols.nb,
                    breaks = 0:7,
                    labels = c("A", "B", "C", "D", "E", "F","G","H"),
                    name = "Legend") +
  coord_cartesian(xlim = c(-7, 12),ylim = c(32, 38)) +
theme(panel.background = element_rect(colour = "black", fill="lightblue")) 
于 2017-04-30T15:59:33.530 回答