R Create a Spatial Bubble Plot That Overlays A basemap of the US and other spatial layers as needed

不问归期 提交于 2019-12-04 17:01:11

This may be helpful. I approached your question using my own way. This may be a simpler operation to achieve what you are probably trying to do. For maps, GADM is great. But, some packages already got maps. Here, you can easily get the States map in the following way. Then, you can draw the map using ggplot2. geom_path draws the US, and geom_point adds the data points in myData.If you want to control size of bubbles in ggplot2,you can use size in aes.

library(map)
library(ggplot2)

# Get US map
usa <- map_data("state")

# Draw the map and add the data points in myData

ggplot() +
geom_path(data = usa, aes(x = long, y = lat, group = group)) +
geom_point(data = myData, aes(x = long, y = lat, size = pop), color = "red") 

The following take a similar approach to @jazzurro's use of ggplot and your initial approach, but

  • uses a different base map
  • further reduces the polygons (you don't need hi-res borders for a bubble plot)
  • uses geom_map vs geom_path or geom_polygon
  • uses the Albers projection in coord_map
  • gets rid of map chart junk

 

library(maptools)
library(mapproj)
library(rgeos)
library(rgdal)
library(ggplot2)

# for theme_map
devtools::source_gist("33baa3a79c5cfef0f6df")

# nice US map GeoJSON
us <- readOGR(dsn="http://eric.clst.org/wupl/Stuff/gz_2010_us_040_00_500k.json", layer="OGRGeoJSON")

# even smaller polygons
us <- SpatialPolygonsDataFrame(gSimplify(us, tol=0.1, topologyPreserve=TRUE), 
                               data=us@data)

# don't need these for the continental base map
us <- us[!us$NAME %in% c("Alaska", "Hawaii", "Puerto Rico", "District of Columbia"),]

# for ggplot
map <- fortify(us, region="NAME")

# your data
myData <- data.frame(name=c("Florida", "Colorado", "California", "Harvard", "Yellowstone"),
                     lat=c(28.1, 39, 37, 42, 44.6), 
                     long=c(-81.6, -105.5, -120, -71,-110),
                     pop=c(280, 156, 128, 118, 202))

# the map

gg <- ggplot()
# the base map
gg <- gg + geom_map(data=map, map=map,
                    aes(x=long, y=lat, map_id=id, group=group),
                    fill="#ffffff", color="#0e0e0e", size=0.15)
# your bubbles
gg <- gg + geom_point(data=myData, 
                      aes(x=long, y=lat, size=pop), color="#AD655F") 
gg <- gg + labs(title="Bubbles")
# much better projection for US maps
gg <- gg + coord_map(projection="albers", lat=39, lat1=45)
gg <- gg + theme_map()
gg <- gg + theme(legend.position="bottom")
gg <- gg + theme(plot.title=element_text(size=16))
gg

This should make it pretty straightforward to add other layers as well.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!