Я пытаюсь нарисовать карту для всей провинции Египта, используя карты и пакет 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)
Но мне не удалось найти координаты провинций Египта, чтобы их нарисовать.
Сказав это, я понимаю, что это может быть проблемой, если вы новичок в R, поэтому я дал ответ. Чтобы ваш вопрос не был закрыт, обновите его, добавив ссылки на данные, на которые вы ссылались, и любой использованный вами код. Спасибо и удачного кодирования!
Хотя вы не предоставили ссылки на источник ваших данных или код, который вы используете для создания объекта 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")
Спасибо за это... Могу ли я спросить, где я могу получить эти файлы форм? Я просматриваю руководство по научной фантастике, но вроде не понятно
@MohamedSamir - ссылка в ответе выше. Ссылка на полную страницу здесь.
Я нашел точное место, где вы это получили: • data.humdata.org/dataset/cod-ab-egy
@MohamedSamir - рад слышать. Почти всегда проще потратить несколько дополнительных минут на поиск данных, чем создавать собственные данные на основе необработанных координат. Если вам понадобятся данные в будущем, добавьте «шейп-файл» в критерии поиска, и чаще всего вы найдете то, что ищете.
Спасибо за ваш комментарий. Иногда, когда дело доходит до выделения определенной области или построения для нее данных, и эта область представляет собой просто локализованное место отбора проб или улицу в провинции. Можно ли получить координаты этой конкретной второстепенной области с карты Google и добавить/отредактировать столбец геометрии шейп-файла, уже присутствующий в онлайн-шейп-файле? а затем заполнить с помощью ggplot2? Действительно, просмотр конкретной провинции, такой как Каир, дает вам только 10 мест, то есть не все места. Вы можете себе представить, насколько информативным это будет, если дело дойдет до определенной «очень незначительной» области. заранее спасибо
Я посмотрел столбец геометрии, это список, я попытался написать его с помощью пакета xlsx, чтобы посмотреть, что внутри, но не смог. Я понял, что этот столбец используется пакетом для построения точек/линий, но в нем гораздо больше информации. Можно ли отредактировать его или добавить новое местоположение в этот шейп-файл?
@MohamedSamir - добавлено несколько опций, надеюсь, они вам нужны. Я рекомендую прочитать руководства sf
и ggplot2
для получения дополнительной информации.
Привет, Мохамед Самир, добро пожаловать в SO. В настоящее время ваш вопрос соответствует требованиям SO. Ожидается, что вы предоставите минимальный воспроизводимый пример , задавая вопрос. По этой ссылке есть действительно полезные рекомендации о том, как создать MRE и, в частности, о том, как делиться примерами данных. В вашем случае это означает включение ссылок на загружаемые вами данные и код, который вы использовали для создания объекта mapdata_Egypt. Вопросы без необходимой информации могут быть закрыты сообществом.