Как создать карту в R из пространственного многоугольника, заданного как тип данных списка

У меня есть список (импортированный из файла Stata dta), содержащий записи, определяющие пространственные полигоны для карты, чтобы дать представление:

> typeof(aux3)
[1] "list"
> mode(aux3)
[1] "list"
> head(aux3)
  _ID        _X       _Y
1   1        NA       NA
2   1 -22.23933 64.56315
3   1 -22.25667 64.56053
4   1 -22.25026 64.56653
5   1 -22.27167 64.57319
6   1 -22.30311 64.55409
> tail(head(aux3,20000))
      _ID       _X       _Y
19995   2 21.21593 60.24696
19996   2 21.21650 60.24337
19997   2 21.23972 60.24913
19998   2 21.22203 60.23304
19999   2 21.21618 60.23332
20000   2 21.22092 60.23930
> #etc.

Я хотел бы преобразовать это в структуру данных, с помощью которой я могу работать над созданием карты (без больших трудностей и без необходимости в большом опыте, никогда не делая этого раньше) в R. Я сделал вывод, что тип SpacialPolygons пакета sp является Самый простой выбор Кроме того, из определения казалось, что метод SpacialPolygons (определенный в этом пакете, см . Документацию пакета, стр. 79) является правильным методом для преобразования из списка в этот тип данных.

К сожалению, метод не так прост для работы, и мне нужна помощь. Моя (наивная) попытка выдает ошибку, которую я не понимаю и которая не приводит к каким-либо интересным результатам в поиске Google:

> library(maptools)
Loading required package: sp
Checking rgeos availability: FALSE
    Note: when rgeos is not available, polygon geometry     computations in maptools depend on gpclib,
    which has a restricted licence. It is disabled by default;
    to enable gpclib, type gpclibPermit()
> SP<-SpatialPolygons(aux3)
Error in SpatialPolygons(aux3) : 
  cannot get a slot ("area") from an object of type "integer"

Можно ли преобразовать приведенный выше список в SpacialPolygon? Если так, то как? Если нет, какой формат мне выбрать? Благодарю.

1 ответ

Решение

Если вы просто хотите нарисовать карту, вы можете использовать ggplot. Я не могу проверить это, так как у меня нет ваших данных, но я должен работать.

library(ggplot2)
aux_df <- data.frame(aux3)
# as per comment: the list-to-dataframe conversion prepends the column names with X
ggplot(aux_df, aes(x=X_X, y=X_Y, group=X_ID) + 
  geom_polygon(color='black', fill=NA) +
  coord_map() +
  theme_classic()

Вышесказанное предполагает список aux3 имеет долготу и широту в _X а также _Y и полигоны, определенные как _ID, По умолчанию применяется проекция Меркатора, но вы можете изменить это, используя другие аргументы coord_map(),

Вот рабочий пример использования карты округов Огайо (произвольный выбор).

library(ggplot2)
ohio_poly <- map_data('county', region='ohio')
ggplot(ohio_poly, aes(x=long, y=lat, group=group)) +
  geom_polygon(color='black', fill=NA) +
  coord_map() +
  theme_classic()

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

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