ggplot Карта смещается при добавлении geom_point

Я пытаюсь создать карту, используя ggplot и наслаивая мои точки широты и долготы.

Я создал карту США без проблем, но когда я накладываю слой в геом_точке по широте/долготе, карта США сжимается и изменяется. Может кто-нибудь указать мне, почему это происходит?

stateData <- map_data('state')
head(stateData)
us <- fortify(stateData, region = 'region')
gg <- ggplot() + geom_map(data  =  us, map = us,
                         aes(x = long, y = lat, map_id = region, group = group),
                         fill = 'white', color = 'black', size = 0.25) + 
  coord_map('albers', lat0 = 39, lat1 = 45) +
  theme_map()


gg + #add the data points with lon/lat declaring the columns
  geom_point(data=new_datav2, aes(x=lon, y=lat), color='red', alpha=0.15)  
postalCode  county                 lat       lon
94102   San Francisco County    37.77711868 -122.4196396
94102   San Francisco County    37.77711868 -122.4196396
94102   San Francisco County    37.77711868 -122.4196396
94102   San Francisco County    37.77711868 -122.4196396
94612   Alameda County  37.80508041 -122.2730713
94002   San Mateo County    37.51834106 -122.276207
94102   San Francisco County    37.77711868 -122.4196396
94102   San Francisco County    37.77711868 -122.4196396
94102   San Francisco County    37.77711868 -122.4196396
94612   Alameda County  37.80508041 -122.2730713
94102   San Francisco County    37.77711868 -122.4196396
94102   San Francisco County    37.77711868 -122.4196396
94102   San Francisco County    37.77711868 -122.4196396
94102   San Francisco County    37.77711868 -122.4196396
94102   San Francisco County    37.77711868 -122.4196396
94102   San Francisco County    37.77711868 -122.4196396
94102   San Francisco County    37.77711868 -122.4196396
94063   San Mateo County    37.48450089 -122.2277222
94102   San Francisco County    37.77711868 -122.4196396
94596   Contra Costa County 37.90118027 -122.0616226
94102   San Francisco County    37.77711868 -122.4196396
94704   Alameda County  37.86988068 -122.2705383
94612   Alameda County  37.80508041 -122.2730713


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

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

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


person ZHX    schedule 21.02.2021    source источник
comment
Здравствуй ЖХ. Я не могу воспроизвести вашу ошибку. Я получаю одинаковое выравнивание карты с вашими точками и без них. Какие пакеты вы загрузили для начала?   -  person Nicolás Velásquez    schedule 21.02.2021
comment
Благодарю за ваш ответ. Я загрузил следующие пакеты (дайте мне знать, если вам нужна дополнительная информация или мой набор данных: библиотека (dplyr) библиотека (карты) библиотека (mapproj) библиотека (ggplot2) библиотека (tidyverse) библиотека (весы) библиотека (листовка) библиотека (plyr) библиотека (ggridges) библиотека (hrbrthemes) библиотека (fmsb) библиотека (radarchart) библиотека (forcats) библиотека (ggthemes)   -  person ZHX    schedule 21.02.2021
comment
Я использую RStudio 1.4 и R4.03. Использование Windows 10.   -  person ZHX    schedule 21.02.2021
comment
Пожалуйста, смотрите мой отредактированный пост для ссылок на мой экран перед использованием geom_point и после использования geom_point.   -  person ZHX    schedule 21.02.2021


Ответы (1)


Глядя на ваше изображение, становится очевидным, что у вас есть красная точка, которая находится на северо-востоке США. Этот пункт отсутствует в вашем наборе примеров. Я смоделирую аналогичный выброс, но код должен решить проблему с проекцией.

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

Набор точек:

df_points <- 
structure(list(
    postalCode = c(94102, 94612, 94102, 94063, 0), 
    County = c("San Francisco County", "Alameda County", "San Francisco County", 
    "San Mateo County", "This_is_the_outlier"), 
    lat = c(37.77711868, 37.80508041, 
    37.77711868, 37.48450089, 40), 
    lon = c(-122.4196396, -122.2730713, 
    -122.4196396, -122.2277222, -10)), 
  row.names = c(NA, -5L), 
  class = c("tbl_df", "tbl", "data.frame"))

Собственное отображение:

library(tidyverse)
library(maps)
library(mapproj)
library(ggthemes)

us <- fortify(stateData, region = 'region')
gg <- ggplot() + 
  geom_map(data  =  us, map = us,
           aes(x = long, y = lat, map_id = region, group = group),
           fill = 'white', color = 'black', size = 0.25) +
  coord_map('albers', lat0 = 39, lat1 = 45) +
  theme_map()

Первый вариант, отфильтровать выброс.

gg + #add the data points with lon/lat declaring the columns
  geom_point(data=df_points %>% filter(lon < -65), ## Here is where you filer the eastern outlier by excluding all data east of longitude 65W.
             aes(x=lon, y=lat), color='red', alpha=0.15) 

Второй вариант, ограничить горизонтальные пределы графика.

gg + #add the data points with lon/lat declaring the columns
  geom_point(data=df_points,
             aes(x=lon, y=lat), color='red', alpha=0.15) +
    coord_map(xlim = c(-130, -65)) # Here you crop the plotting images from 130W to 65W.

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

person Nicolás Velásquez    schedule 21.02.2021
comment
ты решил это! Ты лучший!!!! Большое спасибо, я так долго ломал голову над этой проблемой. Не могли бы вы объяснить, почему у меня возникли проблемы? - person ZHX; 21.02.2021
comment
Я рад, что это сработало :) Северо-восточная точка является выбросом, из-за которого карта расширяется на восток. Прямоугольное отображение такой обширной территории в проекции по умолчанию с помощью coord_map() всегда будет отображать изогнутую Северную Америку. Подумайте о тех картах, которые охватывают Северную Америку и Евразию. - person Nicolás Velásquez; 21.02.2021