我想使用R中的sf和map包來記錄一系列的地圖。我的資料是一個sf物件,有不同的屬性與方形多邊形相連。對于我想要映射的每個屬性,地圖的斷點都是相同的,這就是為什么我想到要撰寫一個簡單的回圈。
下面的代碼將給你一個我的資料樣本。對不起,dput有點長,這是因為sf物件整合了幾何圖形。
library(sf)
library(tmap)
library(tmaptools)
網格< -結構(list(C1_shr_0304= c(10. 5263157894737, 9.30232558139535,5.63380281690141, 10.4972375690608, 8. 98876404494382, 5.51181102362205,
8.51063829787234, 8.15217391304348, 12. 6168224299065)。 C2_shr_0304 = c(2. 10526315789474,
3.48837209302326, 1.40845070422535, 0. 552486187845304, 1.68539325842697,
1.5748031496063, 3. 19148936170213, 1.08695652173913, 2.33644859813084
), C3_shr_0304 = c(14。 7368421052632, 15.1162790697674, 16.9014084507042,
9.39226519337017, 10.1123595505618, 11. 8110236220472, 8.51063829787234,
15.2173913043478, 12. 1495327102804)。 geom =結構(list(結構(list()
list(結構(C(544950. 2102893, 544663.90075037, 544662.782562812,
544949.084933334,/span> 544950.2102893,/span> 3836419. 17735834, 3836417.78717694,
3836648.81133503, 3836650.2015547, 3836419. 17735834), 。 Dim = c(5L, 。
2L)))。 class = c("XY"。 "MULTIPOLYGON"/span>。 "sfg"))。 結構(list()
list(結構(c(545236. 519875821, 544950.2102893, 544949.084933334,
545235.387351436, 545236.519875821, 3836420. 57642335, 3836419.17735834,
3836650.2015547, 3836651.60065824, 3836420. 57642335), 。 Dim = c(5L, 。
2L))))。 class = c("XY"。 "MULTIPOLYGON"/span>。 "sfg"))。 結構(list()
list(結構(c(545522。 829510243, 545236. 519875821, 545235.387351436,
545521.689817429,/span> 545522.829510243,/span> 3836421. 984372, 3836420.57642335,
3836651.60065824, 3836653.00864566, 3836421. 984372), . Dim = c(5L, 。
2L)))。 class = c("XY"。 "MULTIPOLYGON"/span>。 "sfg"))。 結構(list()
list(結構(C(544949. 084933334, 544662. 782562812, 544661.664316089,
544947.959517824, 544949.084933334, 3836650. 2015547, 3836648.81133503, 3836648.
3836879.83557164, 3836881.22582958, 3836650。 2015547), 。 Dim = c(5L, 。
2L))))。 class = c("XY"。 "MULTIPOLYGON"/span>。 "sfg"))。 結構(list()
list(結構(c(545235。 387351436, 544949.084933334, 544947.959517824,
545234.254767129, 545235.387351436, 3836651。 60065824, 3836650.2015547, 3836650.
3836881.22582958, 3836882.62497164, 3836651. 60065824), . Dim = c(5L, 。
2L))))。 class = c("XY"。 "MULTIPOLYGON"/span>。 "sfg"))。 結構(list()
list(結構(c(544947。 959517824, 544661. 664316089, 544660.546010205,
544946.834042773, 544947.959517824, 3836881. 22582958, 3836879.83557164,
3837110.85988679, 3837112.25018299, 3836881. 22582958), . Dim = c(5L, 。
2L)))。 class = c("XY"。 "MULTIPOLYGON"/span>。 "sfg"))。 結構(list()
list(結構(c(545234。 254767129, 544947.959517824, 544946.834042773,
545233.122122902, 545234.254767129, 3836882。 62497164, 3836881.22582958,
3837112.25018299, 3837113.64936355, 3836882. 62497164), . Dim = c(5L, 。
2L)))。 class = c("XY"。 "MULTIPOLYGON"/span>。 "sfg"))。 結構(list()
list(結構(c(545521. 689817429, 545235. 387351436, 545234.254767129,
545520.550064315, 545521.689817429, 3836653。 00864566, 3836651.60065824,
3836882.62497164, 3836884.03299782, 3836653。 00864566), 。 Dim = c(5L, 。
2L)))。 class = c("XY"。 "MULTIPOLYGON"/span>。 "sfg"))。 結構(list()
list(結構(C(545520. 550064315, 545234. 254767129, 545233.122122902,
545519.4102509, 545520.550064315, 3836884. 03299782, 3836882.62497164,
3837113.64936355,/span> 3837115.05742848,/span> 3836884. 03299782), . Dim = c(5L, 。
2L)))。 class = c("XY"。 "MULTIPOLYGON"/span>。 "sfg")))。 n_empty = 0L。 crs = structure(list()
epsg = 6690L, proj4string = " proj=utm zone=53 ellps=GRS80 units=m no_defs")/span>。 class = "crs")。 class = c("sfc_MULTIPOLYGON"/span>。
"sfc"),精度 = 0。 bbox =結構(c(xmin = 544660. 546010205,
ymin = 3836417.78717694,/span> xmax = 545522。 829510243, ymax = 3837115.05742848。
)。 class = "bbox"/span>)))。 行。 names = c(NA。 -9L)。 class = c("sf"。
"資料。 frame"), sf_column = "geom"。 agr =結構(c(C1_shr_0304 = NA_integer_。
C2_shr_0304 = NA_integer_。 C3_shr_0304 = NA_integer_)。 class = " factor", 。 標簽 = c("constant",.
"聚合", "身份"))
為了用tmap做一個地圖,我對第一列使用了以下代碼:
tm_shape(Mesh)
tm_fill(col = paste0(colnames(Mesh)[1])。 打破= c(0,2。 5,5, 7. 5,10,100) ,
調色板= "-magma")
這給我帶來了我想要的東西
在樣本資料中,有三欄。所以我寫了這個簡單的回圈,為每一列使用相同的休息時間做一系列的地圖。
for (i in 1: 3){
png(filename = paste0(colnames(Mesh)[i]。 ". png"),寬度= 480。 高度= 480)。
tm_shape(Mesh)
tm_fill(col = paste0(colnames(Mesh)[i])。 打破= c(0,2。 5,5, 7. 5,10,100) ,
palette= "-magma")
dev.off()
}
這個回圈不起作用,我的檔案夾中的檔案被創建,但卻是空的。另外,如果所有三個地圖都在一個檔案中,那就更好了,但我想先解決這個問題。非常感謝任何幫助。
uj5u.com熱心網友回復:
你只需運行以下幾行代碼,它就應該作業了。
library(tmap)
for (i in 1: 3){
res <- tm_shape(Mesh)
tm_fill(col = paste0(colnames(Mesh)[i])。 打破= c(0,2。 5,5, 7. 5,10,100) ,
palette= "-magma")
tmap_save(res, 檔案名= paste0(colnames(Mesh)[i]。 ". png", sep = "))
}
創建于2021-09-21,由reprex軟體包(v2.0.1)
uj5u.com熱心網友回復:
將你的地圖物件指定為m并在你的回圈中使用print(m)。
如果你想使用一個基本的圖形設備,你需要明確地列印你的tmap。否則,請使用tmap_save(),就像其他答案中的那樣。
for(i in 1: 3){
png(filename = paste0(colnames(Mesh)[i]。 ". png"),寬度= 480。 高度= 480)
m <- tm_shape(Mesh)
tm_fill(col = paste0(colnames(Mesh)[i])。
突破 = c(0,2。 5,5,7。 5,10,100) ,
palette= "-magma")
print(m)
dev.off()
}
為什么for回圈中的tmap函式也有left join,卻不能作業
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/327335.html
標籤:

