Search code examples
rggplot2shapefileggmap

Overlaying ggmap , geom_polygon(shape file) on ggplot2


I have a shape file, and I want to post it on top of a google map with ggplot, but posting via geom_polygon(ggplot2) shows lines that do not make sense

my code:

 ######## the shape file ftp://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2015/Brasil/BR/
  download.file("ftp://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2015/Brasil/BR/br_municipios.zip",temp)

data <- unz(temp, "BRMUE250GC_SIR.shp")

 data.shape<-st_read(data)


  ####### the map from ggmap
  mapa_edital_guarulhos <- get_map(location="GUARULHOS-SP",zoom=11,color = "bw",
                                   maptype = "roadmap") 


 mapa_edital_guarulhos_01<- ggmap(mapa_edital_guarulhos)

 ########## plotting with ggplot

 mapa_edital_guarulhos1 <- mapa_edital_guarulhos_01 + 
 geom_polygon(aes(x=long,y=lat, group=group), data=shape.sp, 
 color='black',alpha=0)

The result:

enter image description here

The arrow shows lines that do not make sense in my plot, plotting only the shape for the same interval:

plot(shape.sp,xlim=c(-47.25,-46.95),ylim=c(-23.1,-22.7)) 

enter image description here

whats is the problem in my code? thanks


Solution

  • Try using geom_sf rather than geom_polygon

    first install dev version of ggplot2

    devtools::install_github('tidyverse/ggplot2')
    
    # read using sf instead of readOGR
    library(sf)
    # something like:
      data.shape <- st_read("www./BRMUE250GC_SIR.shp")
    
      ####### the map from ggmap
      mapa_edital_guarulhos <- get_map(location="GUARULHOS-SP",zoom=11,color = "bw",
                                       maptype = "roadmap") 
    
    
     mapa_edital_guarulhos_01<- ggmap(mapa_edital_guarulhos)
    
     ########## plotting with ggplot
    
     mapa_edital_guarulhos1 <- mapa_edital_guarulhos_01 + 
     geom_sf(data = data.shape, color = 'black', alpha=0)
    

    It's hard to test this without having the dataset. But let me know if that works! I have seen this resolve the problem you are having before.