R:如何通过在基础R图中用光栅过度绘制地图来获得正确的分辨率(光栅)?

时间:2016-01-21 20:29:22

标签: r raster

我想覆盖一个等值区域图(在基础R图中创建):

代码:

library(classInt)
library(RColorBrewer)
library(raster)

GERblue_iran <- structure(list(veggies = c(NA, 1135142.7169744, 1064475.14405642, 
579007.139090945, 2291173.06203667, 1609487.86612194, 5514745.42173307, 
210033.193615536, NA, 1082275.82518455, 395053.664034339, 833546.886449334, 
1350410.79594876, 2030498.45168616, 5018327.9046678, 413119.296060151, 
853322.135586823, 2136776.14200603, 581494.047168068, 535593.624579909, 
414310.523642145, NA, NA, 2156369.86690811, 274390.590608389, 
546804.909031463, 144406.95766963, 285002.432443622, 1605244.30546598, 
307546.827903725, 589330.238261654), state = c("Alborz", "Ardebil", 
"Bushehr", "Chahar Mahall and Bakhtiari", "East Azarbaijan", 
"Esfahan", "Fars", "Gilan", "Golestan", "Hamadan", "Hormozgan", 
"Ilam", "Kerman", "Kermanshah", "Khuzestan", "Kohgiluyeh and Buyer Ahmad", 
"Kordestan", "Lorestan", "Markazi", "Mazandaran", "North Khorasan", 
"Qazvin", "Qom", "Razavi Khorasan", "Semnan", "Sistan and Baluchestan", 
"South Khorasan", "Tehran", "West Azarbaijan", "Yazd", "Zanjan"
)), .Names = c("veggies", "state"), class = "data.frame", row.names = c(NA, 
31L))

iran2 <- getData("GADM", country = "IRN", level = 1)
iran2$veggies <- GERblue_iran[,1]
iran2$veggies[is.na(iran2$veggies)] <- 0
cols <- brewer.pal(n = 4, name = "PuBu")
# jenks
lcols2 <- cut(iran2$veggies,
             breaks = classIntervals(iran2$veggies, n=7,style='jenks')$brks,
             labels = cols)
x11()
plot(iran2, col = as.character(lcols2))

此地图应该由此RasterLayer覆盖(很抱歉要附加):

为此,我想让一些部分透明,我将700以下的值设置为NaN(因为NA不透明)。结果如下:

如您所见,单个值绘制在地图的底部。但是,与原始光栅相比,点/像素的大小(或分辨率)非常粗糙(如果我只绘制没有NaN和透明度的情况,也会出现这种情况)。有谁知道如何设置分辨率wright以获得原始大小?谢谢

这里有两个图的代码:

plot(iran2, col = as.character(lcols2)); plot(nut_iran2, add=TRUE)

1 个答案:

答案 0 :(得分:2)

以下是如何使您的示例更简单:

library(raster)

iran <- getData("GADM", country = "IRN", level = 1)
r <- raster(iran, nrow=100, ncol=100)
set.seed(-99)
values(r) <- runif(ncell(r))
r <- mask(r, iran)
r[r < 0.99] <- NA

以下是制作情节的方法:

plot(r)
plot(iran, col = rainbow(6, start=0.5, end=0.65), add=TRUE)
plot(r, add=TRUE, legend=FALSE)

由于栅格绘图使用图例,因此您可能需要先设置绘图区域。但你也可以做

plot(iran, col = rainbow(6, start=0.5, end=0.65))
plot(r, add=TRUE)

plot(iran, col = rainbow(6, start=0.5, end=0.65), axes=TRUE)
plot(r, add=TRUE, legend=FALSE)
相关问题