Как построить города США с помощью ggplot?

Я могу просто нарисовать штат Луизиана ...

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

введите описание изображения здесь

Теперь у меня есть данные о том, сколько звонков было сделано в определенные города Лос-Анджелеса. Как мне добавить точку для каждого города, из которого был сделан запрос на продажу, на участок?

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

person Ben    schedule 13.03.2015    source источник
comment
Вы, вероятно, захотите использовать + coord_map(), чтобы получить хорошее соотношение сторон.   -  person Gregor Thomas    schedule 13.03.2015


Ответы (2)


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

На карте Google:

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

Карта Google

person JasonAizkalns    schedule 13.03.2015
comment
Благодаря тонну. Я действительно заинтересован в том, чтобы эта карта Google работала сейчас, но когда я выполняю ваш код, все, что я получаю, - это серый фон ggplot с оранжевыми точками (там, где они должны быть). Другими словами, карты нет. Есть идеи, почему? - person Ben; 13.03.2015
comment
@Ben Попробуйте запустить get_map(location = 'Louisiana', zoom = 7) и посмотрите, что получится. Вы за прокси-сервером? Я также заметил опечатку в своем коде, сомневаюсь, что это так, но перепроверьте написание слова Луизиана. - person JasonAizkalns; 13.03.2015
comment
Ничего страшного - я думаю, что эта проблема идет немного глубже, чем я первоначально ожидал. - person Ben; 13.03.2015
comment
@Ben Эта статья - отличное руководство по получению начался с library(ggmap) - person JasonAizkalns; 13.03.2015
comment
Когда я запускаю get_map(location = 'Louisiana', zoom = 7), я получаю сообщение Карта из URL: maps.googleapis.com/maps/api/ Информация из URL: maps.googleapis.com/maps/api/geocode/ вместе с большой матрицей значений - person Ben; 13.03.2015
comment
@Ben А как насчет работы ggmap(get_map(location = 'Louisiana', zoom = 7)) - person JasonAizkalns; 14.03.2015
comment
Не повезло. По-прежнему пустой серый экран. - person Ben; 16.03.2015
comment
Я исправил приведенный выше пример с жестко запрограммированными долгосрочными координатами для набора данных и для объекта get_map. Если это не будет принято, вот этот комментарий :) - person Ufos; 29.05.2018
comment
Я получаю 1: геокодирование завершилось неудачно со статусом OVER_QUERY_LIMIT, location = Baton Rouge, решение заключается в использовании опции source = dsk для геокодирования. - person Guangbo Chen; 26.09.2018

Следующий скрипт должен работать для части карт Google:

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