I'd like to do an Europe map, so I was trying with this code but I don't really know how it works.
#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"))
Now I was using this code that I've found, I know my problem is when I bind data, if someone can tell me how can I solve it or if you know other way to do it... :)
# 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)
``
I think you assumed that the europa object still had an item named @data
, but if you look at it that is not the case:
> 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"
Also, the names of the columns you wnat to merge on are not the same in europa
and europe
, so you need to tell merge that and keep all areas is done by 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"
Now you can plot:
png()
spplot(europa, zcol = "Production",xlim=c(-30,120) , ylim=c(30,90), lwd=0.5)
dev.off()