Как создать карту в 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()