R:如何通过在基本 R 图中用光栅重叠绘制地图来获得正确的分辨率(光栅)?
R: How to get the right resolution (raster) by overplotting a map with raster in base R plot?
我想叠加等值线图(在基础 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 不透明)。结果是:
如您所见,单个值绘制在地图的底部。但是,与原始栅格相比,dots/pixels 的大小(或分辨率)非常粗糙(如果我只是在没有 NaN 和透明度的情况下绘图,也会发生这种情况)。有谁知道如何设置分辨率以保持原始尺寸?谢谢
这里是两个图的代码:
plot(iran2, col = as.character(lcols2)); plot(nut_iran2, add=TRUE)
以下是如何使示例更简单的方法:
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)
我想叠加等值线图(在基础 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 不透明)。结果是:
如您所见,单个值绘制在地图的底部。但是,与原始栅格相比,dots/pixels 的大小(或分辨率)非常粗糙(如果我只是在没有 NaN 和透明度的情况下绘图,也会发生这种情况)。有谁知道如何设置分辨率以保持原始尺寸?谢谢
这里是两个图的代码:
plot(iran2, col = as.character(lcols2)); plot(nut_iran2, add=TRUE)
以下是如何使示例更简单的方法:
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)