Использование ggplot для создания картограммы из SpatialPolygonsDataFrame

У меня есть SpatialPolygonsDataFrame из пакета UScensus2010. Я пытаюсь создать хороплет. Когда я это делаю, это работает так, как ожидалось:

data(colorado.county10)
choropleth(colorado.county10,
           "P0010001",
           color = list(fun = "rainbow", 
                        attr = list(4)),
           main="2010 US Counties",
           type="plot",
           border="black")

но это не удается из-за того, что «P0010001» не найден

data(colorado.county10)
ggplot(colorado.county10, aes(long, lat, group = group)) +
  geom_polygon(aes(fill = P0010001), colour = alpha("white", 1/2), size = 0.2) +
  scale_fill_brewer(pal = "PuRd")

Пытаясь это выяснить, я заметил, что colorado.county10$P0010001 возвращает массив чисел, а colorado.county10[,"P0010001"] возвращает SpatialPolygonsDataFrame.

Есть понимание происходящего?


person user3003101    schedule 18.11.2013    source источник


Ответы (1)


Если вы хотите использовать ggplot, вам нужно преобразовать SpatialPolygonsDataFrame в data.frame.

ggplot2 предоставляет ряд fortify методов, которые создают правильно отформатированные данные.

В настоящее время метод fortify.SpatialPolygonsDataFrame не сохраняет компонент data, он предоставляет столбец id, который содержит имена строк из data.frame в слоте data исходного SpatialPolygonsDataFrame.

Обратите внимание, что data.frames — неэффективный способ хранения этой информации (1 строка для каждой вершины для каждого полигона).

Таким образом, следующее будет работать, но медленно и может вызвать проблемы с памятью.

c10 <- fortify(colorado.county10)

c10d <- cbind(c10, colorado.county10@data[c10$id,])

ggplot(c10d, aes(long, lat, group = group)) +
   geom_polygon(aes(fill = factor(P0010001)), colour = alpha("white", 1/2), size = 0.2) +
   scale_fill_brewer(pal = "PuRd") 

Использование base функций построения графиков будет намного быстрее и не потребует столько ресурсов.

person mnel    schedule 18.11.2013