How do I plot US cities using ggplot?

12,215
require(ggplot2)
require(ggmap)
require(maps)
LA <- map_data("state", region="louisiana")

salesCalls <- data.frame(State=rep("louisiana",5), 
                         City=c("Baton Rouge", "New Orleans", "Shreveport", 
                                "Lafayette", "Mandeville"),
                         Calls=c(10,5,8,13,2))

salesCalls <- cbind(geocode(as.character(salesCalls$City)), salesCalls)

salesCalls
#         lon      lat     State        City Calls
# 1 -91.14032 30.45828 louisiana Baton Rouge    10
# 2 -90.07153 29.95107 louisiana New Orleans     5
# 3 -93.75018 32.52515 louisiana  Shreveport     8
# 4 -92.01984 30.22409 louisiana   Lafayette    13
# 5 -90.06563 30.35825 louisiana  Mandeville     2

ggplot(LA, aes(x=long, y=lat)) +
  geom_polygon() +
  coord_map() +
  geom_point(data=salesCalls, aes(x=lon, y=lat, size=Calls), color="orange")

ggplot2

On a Google Map:

ggmap(get_map(location = 'Louisiana', zoom = 7)) +
  geom_point(data=salesCalls, aes(x=lon, y=lat, size=Calls), color="orange")

Google Map

Share:
12,215

Related videos on Youtube

Ben
Author by

Ben

Founder of Practice Probs - a platform for learning programming via fun challenge problems.

Updated on June 09, 2022

Comments

  • Ben
    Ben almost 2 years

    I can plot the state of Louisiana just fine...

    require(ggplot2)
    require(ggmap)
    require(maps)
    LA <- map_data("state", region="louisiana")
    ggplot(LA, aes(x=long, y=lat))+geom_polygon()
    

    enter image description here

    Now, I have data on how many sales calls were made to particular cities in LA. How would I add a point for each city where a sales call was made to the plot?

    salesCalls <- data.frame(State=rep("louisiana",5), 
                                 City=c("Baton Rouge", "New Orleans", "Shreveport", "Lafayette", "Mandeville"),
                                 Calls=c(10,5,8,13,2))
    salesCalls
          State        City Calls
    1 louisiana Baton Rouge    10
    2 louisiana New Orleans     5
    3 louisiana  Shreveport     8
    4 louisiana   Lafayette    13
    5 louisiana  Mandeville     2
    
    • Gregor Thomas
      Gregor Thomas about 9 years
      You probably want to use + coord_map() as well to get the aspect ratio nice.
  • Ben
    Ben about 9 years
    Thanks a ton. I'm really interested in getting that google map to work now, but when I execute your code all I get is the grey ggplot background with orange points (where they're supposed to be). In other words, there's no map. Any idea why?
  • JasonAizkalns
    JasonAizkalns about 9 years
    @Ben Try running get_map(location = 'Louisiana', zoom = 7) and see what comes back. Are you behind a proxy server? I also noticed a typo in my code, doubtful that would be it, but double-check the spelling of "Louisiana"
  • Ben
    Ben about 9 years
    Never mind - I think this issue goes a little deeper than I initially expected.
  • JasonAizkalns
    JasonAizkalns about 9 years
    @Ben This Article is a great guide to getting started with library(ggmap)
  • Ben
    Ben about 9 years
    When I run get_map(location = 'Louisiana', zoom = 7) I get the message "Map from URL : maps.googleapis.com/maps/api/… Information from URL : maps.googleapis.com/maps/api/geocode/…" along with a big matrix of values
  • JasonAizkalns
    JasonAizkalns about 9 years
    @Ben What about when running ggmap(get_map(location = 'Louisiana', zoom = 7))
  • Ben
    Ben about 9 years
    No luck. Still just a blank grey screen.
  • Ufos
    Ufos almost 6 years
    I fixed the example above with hardcoded lon-lat coordinates for the dataset and for the get_map thingy. If it does not get accepted here is this comment :)
  • Guangbo Chen
    Guangbo Chen over 5 years
    I get "1: geocode failed with status OVER_QUERY_LIMIT, location = "Baton Rouge" , solution is to use option source= "dsk" for geocode.