我想做一张欧洲地图,所以我尝试使用这段代码,但我真的不知道它是如何工作的。
#that's my data
europe<-structure(list(Code = c("BE", "BG", "CZ", "DK", "DE", "EE", "IE",
"EL", "ES", "FR", "HR", "IT", "CY", "LV", "LT", "LU", "HU", "MT",
"NL", "AT", "PL", "PT", "RO", "SI", "SK", "FI", "SE", "IS", "NO",
"CH", "UK"), Country = c("Belgium", "Bulgaria", "Czechia", "Denmark",
"Germany (until 1990 former territory of the FRG)", "Estonia",
"Ireland", "Greece", "Spain", "France", "Croatia", "Italy", "Cyprus",
"Latvia", "Lithuania", "Luxembourg", "Hungary", "Malta", "Netherlands",
"Austria", "Poland", "Portugal", "Romania", "Slovenia", "Slovakia",
"Finland", "Sweden", "Iceland", "Norway", "Switzerland", "United Kingdom"
), Production = c(133.2, 48.2, 77.4, 138.2, 121.3, 71.2, 178.9,
58.5, 95, 126.1, 64.5, 100.1, 75, 59.8, 67.7, 175.1, 66.8, 75.8,
122.3, 115.7, 65, 66.1, 66.1, 83.9, 70.1, 109.5, 112.4, 118.2,
152.4, 129.3, 96.8)), row.names = c(NA, -31L), class = c("tbl_df",
"tbl", "data.frame"))
现在我正在使用我找到的这段代码,我知道我的问题是当我绑定数据时,如果有人可以告诉我如何解决它或者你是否知道其他方法......:)
# Download the shape file from the web and unzip it:
download.file("http://thematicmapping.org/downloads/TM_WORLD_BORDERS_SIMPL-0.3.zip" , destfile="world_shape_file.zip")
system("unzip world_shape_file.zip")
# Load it as a geospatial object in R
library(rgdal)
my_spdf <- readOGR( dsn= "./world_shape_file/" , layer="TM_WORLD_BORDERS_SIMPL-0.3", verbose=FALSE)
europa <- my_spdf[my_spdf@data$REGION==150 , ]
europa@data <- merge(europa@data, europe)
# Use the cartography library to do the choropleth map
library(maptools)
par(mar=c(0,0,0,0))
spplot(europa, zcol = "Production",xlim=c(-30,120) , ylim=c(30,90), lwd=0.5)
``
我认为您认为欧罗巴天体仍然有一个名为
@data
的项目,但如果您查看它,情况并非如此:
> my_spdf <- readOGR( dsn= "~/Downloads/" , layer="TM_WORLD_BORDERS_SIMPL-0.3", verbose=FALSE)
> europa <- my_spdf[my_spdf@data$REGION==150 , ]
> names(europa)
[1] "FIPS" "ISO2" "ISO3" "UN" "NAME" "AREA" "POP2005"
[8] "REGION" "SUBREGION" "LON" "LAT"
此外,您想要合并的列的名称在
europa
和 europe
中并不相同,因此您需要告诉 merge 并保持所有区域都是由 all.x=TRUE 完成的
> europa <- merge(europa, europe, by.x="FIPS",by.y="Code", all.x=TRUE)
> names(europa)
[1] "FIPS" "ISO2" "ISO3" "UN" "NAME" "AREA" "POP2005"
[8] "REGION" "SUBREGION" "LON" "LAT" "Country" "Production"
现在您可以绘制:
png()
spplot(europa, zcol = "Production",xlim=c(-30,120) , ylim=c(30,90), lwd=0.5)
dev.off()
根据您提供的数据,一个紧凑的替代方案可以使用包
WorldMapR
及其函数 worldmap
:
europedf <- as.data.frame(europe)
europedf[1:3,] # show first rows of the data
worldplot(data = europedf,
ColName = "Production",
CountryName = "Country",
CountryNameType = "name",
latitude = c(35,72), longitude = c(-24,40), # focus on Europe
palette_option = brewer.pal(n = 8, name = "Blues"),
annote = T, # If you want labels
div = 0.8 # dimensions option
)