2016-01-21 63 views
-1

我要覆蓋一個地區分佈圖(在基礎R劇情創建):R:如何通過在基本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和透明度的情況下進行繪圖,這也會發生)。有誰知道如何設置分辨率賴特以獲得原始尺寸?由於

這裏有兩個地塊代碼:

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

回答

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) 
+0

謝謝你的提示,但我想你明白的問題是錯誤的。排列順序一切正常(您的版本提供了錯誤的圖片,未分類)。通過rsel你的意思可能是光柵,賴特。但是,我的問題是,通過重疊繪製柵格,柵格獲得了粗略的分辨率,而不僅僅是我單獨繪製柵格。我的問題是爲什麼這樣?如何將光柵分辨率調整爲分區圖。 –

+0

對不起,我真的不明白那個rsel = r。這種繪製方式很好。然而,我在解決柵格問題時遇到的真正問題是,我掩蓋了伊朗的世界柵格,而不是首先將伊朗裁剪到伊朗境內,然後掩蓋它們。因此,我得到了最終的情節,休息像素顯示在我的結果圖中...現在我修復了它。謝謝 –

+0

只作爲補充:我原來的發佈代碼'plot(iran2,col = as.character(lcols2)); plot(nut_iran2,add = TRUE)'現在可以工作(使用光柵的裁剪和遮罩)和您的(@RobertH)發佈的解決方案相同。但是,沒有座標邊界框。 –