Search code examples
rmapsrgdalr-maptools

How to plot an Europe map with my own data?


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)

``

Solution

  • 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()
    

    enter image description here