简体   繁体   中英

Fill Polygons using ggmap

Consider following example from the ggmap vignette

library(ggplot2)
library(ggmap)
library(rgeos)
library(sp)
library(maptools)

# get an example shape file
download.file('http://www2.census.gov/geo/tiger/PREVGENZ/tr/tr00shp/tr48_d00_shp.zip', destfile = 'census.zip')

# unzip
unzip("census.zip");

# read data into R
shapefile <- readShapeSpatial("tr48_d00.shp", proj4string = CRS("+proj=longlat +datum=WGS84"))

# convert to a data.frame for use with ggplot2/ggmap and plot
data <- fortify(shapefile)
qmap("texas", zoom = 6, maptype = "satellite") + geom_polygon(aes(x = long, y = lat, group = group), 
data = data, colour = "white", fill = "black", alpha = .4, size = .3)

Now the question:

I want to use a variable for filling the polygons, like this:

# define a vector for the fill aestetic
fill_colour <- as.factor(1:length(shapefile))
# plot
qmap("texas", zoom = 6, maptype = "satellite") 
    + geom_polygon(aes(x = long, y = lat, group = group, fill =  fill_colour), data = data, alpha = .4,size = .3)

But this doesnt work, I get following error:

Error: Aesthetics must either be length one, or the same length as the dataProblems:fill_color

I found a solution using geom_map yielding a similar result:

fill_colour <- as.factor(1:length(shapefile))
qmap("texas", zoom = 6, maptype = "satellite") + geom_map(inherit.aes = FALSE, aes(fill=fill_colour, map_id = 1:length(shapefile)), map=data) + scale_fill_manual(values = c("0" = "red", "1" = "blue"))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM