Данные о долготе и широте не создают правильные многоугольники с использованием пакетов maps/mapdata/ggplot2

Я пытаюсь нарисовать карту для всей провинции Египта, используя карты и пакет ggplot2 в R, но я не нашел ни одного субрегиона (провинций) Египта, доступного в базах данных этих пакетов. Итак, я загрузил координаты (долготу и широту) всех провинций Египта из Google (и других веб-сайтов) и попытался создать карту, но это дало мне совершенно разрозненную картину, которая определенно не является провинциями Египта. Это заставило меня подумать, что координаты поисковой системы (например, Google) не похожи на те, которые использует R. Я понимаю, что R имеет дело с координатами в +ve и отрицательных значениях, тогда как общедоступные базы данных - нет. Нужно ли мне как-то конвертировать его в формат «R»? Может ли кто-нибудь из вас предложить способ обойти эту проблему, особенно я не нашел длинную/широтную провинцию Египта в базах данных пакетов R?

Спасибо

Я успешно опробовал этот код для Египта в целом.

ggplot() + 
  geom_polygon(data = mapdata_Egypt, aes(x=long, y = lat, group = group), fill = NA, color = "red") + 
  coord_fixed(1.3)

Но мне не удалось найти координаты провинций Египта, чтобы их нарисовать.

Привет, Мохамед Самир, добро пожаловать в SO. В настоящее время ваш вопрос соответствует требованиям SO. Ожидается, что вы предоставите минимальный воспроизводимый пример , задавая вопрос. По этой ссылке есть действительно полезные рекомендации о том, как создать MRE и, в частности, о том, как делиться примерами данных. В вашем случае это означает включение ссылок на загружаемые вами данные и код, который вы использовали для создания объекта mapdata_Egypt. Вопросы без необходимой информации могут быть закрыты сообществом.

L Tyrone 09.05.2024 03:24

Сказав это, я понимаю, что это может быть проблемой, если вы новичок в R, поэтому я дал ответ. Чтобы ваш вопрос не был закрыт, обновите его, добавив ссылки на данные, на которые вы ссылались, и любой использованный вами код. Спасибо и удачного кодирования!

L Tyrone 09.05.2024 03:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хотя вы не предоставили ссылки на источник ваших данных или код, который вы используете для создания объекта mapdata_Egypt, вот повтор, который достигнет вашей цели.

При работе с точечными, линейными или многоугольными географическими данными следует использовать пакет sf. Манипулировать и отображать географические данные с помощью sf относительно легко, а ggplot2 очень хорошо справляется с sf объектами. Ваша проблема, скорее всего, является результатом того, что R не знает, в каком порядке отображать необработанные координаты для построения полигональных объектов, отсюда и ваша «полностью разрушенная картина». Использование sf::st_read() позволяет избежать этой проблемы, поскольку оно напрямую преобразует географические данные, в данном случае шап-файл, в объект, понятный R, например. и sf объект.

Данные, использованные в этом примере, можно найти здесь.

Загрузка пакетов и данных в R

library(sf)
library(ggplot2)

# Load shapefile previously unzipped into your working directory
egypt_sf <- st_read("egy_admbnda_adm2_capmas_20170421.shp")

# View subset of columns and rows in egypt_sf, misalignment of column values
# due to mix of Arabic/English text
egypt_sf[,1:4]
# Simple feature collection with 365 features and 4 fields
# Geometry type: MULTIPOLYGON
# Dimension:     XY
# Bounding box:  xmin: 24.69451 ymin: 21.99913 xmax: 36.90871 ymax: 31.67028
# Geodetic CRS:  WGS 84
# First 10 features:
#           ADM2_EN                ADM2_AR ADM2_PCODE       ADM2_REF                      geometry
# 1    10 Ramadan 1        قسم اول مدينة العاشر من رمض     EG1309   10 Ramadan 1  MULTIPOLYGON (((31.70323 30...
# 2    10 Ramadan 2        قسم ثان مدينه العاشر من رمض     EG1321   10 Ramadan 2  MULTIPOLYGON (((31.72752 30...
# 3         15 Mayu                قسم  15 مايو     EG0103        15 Mayu MULTIPOLYGON (((31.37739 29...
# 4     6 October-1              قسم أول 6 أكتوبر      EG2107    6 October-1 MULTIPOLYGON (((30.98266 30...
# 5     6 October-2              قسم ثان 6 أكتوبر      EG2121    6 October-2 MULTIPOLYGON (((30.954 29.9...
# 6  A-Dakhla Oasis             مركز الوحات الداخلة      EG3202 A-Dakhla Oasis MULTIPOLYGON (((30.53004 27...
# 7      A L Labban                  قسم  اللبان     EG0209     A L Labban MULTIPOLYGON (((29.89994 31...
# 8           Abdin                  قسم عابدين     EG0109          Abdin MULTIPOLYGON (((31.24768 30...
# 9           Abnub                  مركز أبنوب     EG2504          Abnub MULTIPOLYGON (((31.20966 27...
# 10          Abour                   قسم العبو     EG1413          Abour MULTIPOLYGON (((31.4632 30...

Чтобы построить график, просто используйте функцию geom_sf() из ggplot2

ggplot() +
  geom_sf(data = egypt_sf)

Обновление на основе комментария ОП

Не совсем ясно, чего именно вы хотите, но вот код, который, надеюсь, отражает некоторые вещи, которые, как я полагаю, вам нужны:

# Subset egypt_sf based on value in a column in egypt_sf
cairo_sf <- filter(egypt_sf, ADM1_EN == "Cairo")

cairo_sf[,c(1, 3:4, 9)]
# Simple feature collection with 42 features and 4 fields
# Geometry type: MULTIPOLYGON
# Dimension:     XY
# Bounding box:  xmin: 31.21676 ymin: 29.73371 xmax: 31.90697 ymax: 30.19757
# Geodetic CRS:  WGS 84
# First 10 features:
#             ADM2_EN ADM2_PCODE         ADM2_REF ADM1_EN                       geometry
# 1           15 Mayu     EG0103          15 Mayu   Cairo MULTIPOLYGON (((31.37739 29...
# 2             Abdin     EG0109            Abdin   Cairo MULTIPOLYGON (((31.24768 30...
# 3         Ain Shams     EG0130        Ain Shams   Cairo MULTIPOLYGON (((31.36298 30...
# 4      Al Azbakiyya     EG0113     Al Azbakiyya   Cairo MULTIPOLYGON (((31.25389 30...
# 5  Al Darb al-Ahmar     EG0114 Al Darb al-Ahmar   Cairo MULTIPOLYGON (((31.25604 30...
# 6        Al Khalifa     EG0108       Al Khalifa   Cairo MULTIPOLYGON (((31.30736 30...
# 7      Al Matariyya     EG0125     Al Matariyya   Cairo MULTIPOLYGON (((31.31662 30...
# 8          Al Sahil     EG0121         Al Sahil   Cairo MULTIPOLYGON (((31.25724 30...
# 9          Al Salam     EG0132         Al Salam   Cairo MULTIPOLYGON (((31.43298 30...
# 10    Al Sharabiyya     EG0118    Al Sharabiyya   Cairo MULTIPOLYGON (((31.27195 30...

# Plot subsetted sf
ggplot() +
  geom_sf(data = cairo_sf)

# Plot both sf datasets at full extent, colour cairo_sf
ggplot() +
  geom_sf(data = egypt_sf) +
  geom_sf(data = cairo_sf, aes(fill = ADM1_EN)) +
  scale_fill_discrete(name = "Area of\nInterest")

# Plot both sf datasets, colour cairo_sf, use coord_sf() to zoom in
ggplot() +
  geom_sf(data = egypt_sf) +
  geom_sf(data = cairo_sf, aes(fill = ADM1_EN)) +
  coord_sf(xlim = c(31, 32),
           ylim = c(29.6, 30.4)) +
  scale_fill_discrete(name = "Area of\nInterest")

Спасибо за это... Могу ли я спросить, где я могу получить эти файлы форм? Я просматриваю руководство по научной фантастике, но вроде не понятно

Mohamed Samir 09.05.2024 17:16

@MohamedSamir - ссылка в ответе выше. Ссылка на полную страницу здесь.

L Tyrone 09.05.2024 21:10

Я нашел точное место, где вы это получили: • data.humdata.org/dataset/cod-ab-egy

Mohamed Samir 10.05.2024 03:03

@MohamedSamir - рад слышать. Почти всегда проще потратить несколько дополнительных минут на поиск данных, чем создавать собственные данные на основе необработанных координат. Если вам понадобятся данные в будущем, добавьте «шейп-файл» в критерии поиска, и чаще всего вы найдете то, что ищете.

L Tyrone 10.05.2024 03:09

Спасибо за ваш комментарий. Иногда, когда дело доходит до выделения определенной области или построения для нее данных, и эта область представляет собой просто локализованное место отбора проб или улицу в провинции. Можно ли получить координаты этой конкретной второстепенной области с карты Google и добавить/отредактировать столбец геометрии шейп-файла, уже присутствующий в онлайн-шейп-файле? а затем заполнить с помощью ggplot2? Действительно, просмотр конкретной провинции, такой как Каир, дает вам только 10 мест, то есть не все места. Вы можете себе представить, насколько информативным это будет, если дело дойдет до определенной «очень незначительной» области. заранее спасибо

Mohamed Samir 12.05.2024 02:59

Я посмотрел столбец геометрии, это список, я попытался написать его с помощью пакета xlsx, чтобы посмотреть, что внутри, но не смог. Я понял, что этот столбец используется пакетом для построения точек/линий, но в нем гораздо больше информации. Можно ли отредактировать его или добавить новое местоположение в этот шейп-файл?

Mohamed Samir 12.05.2024 03:01

@MohamedSamir - добавлено несколько опций, надеюсь, они вам нужны. Я рекомендую прочитать руководства sf и ggplot2 для получения дополнительной информации.

L Tyrone 12.05.2024 04:23

Другие вопросы по теме