Q: Modify legend scale for ggplot2 bubble plot I am making a map in R plotting several cities with the point size determined by population; it is a bubbleplot superimposed on Tirgris/Line Shapefiles.  Everything is working great except the legend doesn't have a good scale for may data.  I have several communities with ~ 800-1100 people, one with ~ 2000, and 2 that are ~25000+.  The legend that ggplot creates has bubbles for populations of 10000, 20000, and 30000.  I would like it to be something like 2000, 20000, & 30000.  I've done a lot of research but haven't found anything promising.
library(ggplot)
library(rgdal)
library(tigris)

cities.data = read.csv("cities.csv", header = TRUE)
latah.mp <- county_subdivisions(state = '16', county = '057', cb = TRUE)                                                # reads TIGER/Line data from US Census for Latah County
whitman.mp <- county_subdivisions(state = '53', county = '075', cb = TRUE)                                              # reads TIGER/Line data from US Census for Whitman County
region.mp = rbind_tigris(latah.mp, whitman.mp)                                                                  # binds county shapefiles into one image
region.map <- fortify(region.mp)

ggplot() +
 geom_map(data = region.map, map = region.map, aes(x = long, y = lat, map_id = id), fill = "#CCE5CC", color = "#BBD4BB") +
 geom_point(data = cities.data, aes(x = long, y = lat, size = Population), alpha = 0.5, color = "black") +
 scale_size_continuous(range = c(1,10)) +
 annotate("text", x = -117.163454, y = 46.6827, label = "Pullman", size = 2.5) +
 annotate("text", x = -116.998909, y = 46.6827, label = "Moscow", size = 2.5) +
 annotate("text", x = -117.311862, y = 46.8897, label = "Colfax", size = 2.5) +
 annotate("text", x = -116.772232, y = 46.7075, label = "Troy", size = 2.5) +
 annotate("text", x = -117.07534, y = 46.8803, label = "Palouse", size = 2.5) +
 annotate("text", x = -116.92887, y = 46.5215, label = "Genessee", size = 2.5) +
 annotate("text", x = -117.073984, y = 47.1953, label = "Teko", size = 2.5) +
 annotate("text", x = -116.897068, y = 46.8930, label = "Potlatch", size = 2.5) +
 theme_classic() +
 coord_quickmap() +
 theme(axis.line = element_blank(), axis.text.x = element_blank(), axis.text.y = element_blank(), axis.ticks = element_blank(), axis.title.x=element_blank(), axis.title.y=element_blank())

Map of Whitman & Latah Counties
The data from the file "cities.csv" is below if it helps to be able to run the whole code.
  city            lat        long             Population
  Pullman.WA      46.7327    -117.1635        30851
  Tekoa.WA        47.2253    -117.0740        789
  Palouse.WA      46.9103    -117.0753        1092
  Colfax.WA       46.9197    -117.3119        2826
  Potlatch.ID     46.9230    -116.8971        773
  Moscow.ID       46.7306    -116.9989        24406
  Troy.ID         46.7375    -116.7722        906
  Genesee.ID      46.5515    -116.9289        965


A: Three potential solutions I have found working with a similar dataset. Depending on the specific dataset and conditions you are working with, what you choose may be different:
(1) Use a different scale (log, etc) using scale_fill_gradient. (May want to play around with different scales)
p <- p + scale_fill_gradient( trans = 'log')

(2) Limit your legend scale using scale_fill_gradientn Anything outside of the limits will appear as NA.
p <- p + scale_fill_gradientn(colours=topo.colors(7),
                              breaks=c(0,1000,2000),
                              limits=c(0,5000))

(3) Create your own discrete scale by manipulating the data inputted into the map by hand (in this example I used dataset data with value you are mapping as value) This is the most tedious solution but also probably the best solution if your data is very specifically distributed. 
# initial data manipulation before creating map
data$value[data$value < 1000] <- 0
data$value[data$value > 1000 & data$value < 2000] <- 1
data$value[data$value > 2000] <- 2
data$value <- as.factor(data$value)
...
p <- p + scale_fill_manual(values=c("white", "#034e7b","#3690c0"),
                           breaks=c('0','1','2'), 
                           labels=c( '< 1000', '1000-2000', '>2000'))

