хороплет в ggmap не отображается правильно

Кажется, я только что сделал самую странную хороплет в мире.

Код прост:

df$cut <- cut_interval(df$Count, 5)

ggplot(df, aes(lon, lat)) +
  geom_polygon(aes(fill = df$cut), colour = alpha("white", 1/2), size = 0.2) + 
  geom_polygon(data = df , colour = "white", fill = NA) +
  scale_fill_brewer(palette = "PuRd")

(см. Pastebin для dput кадра данных)

Но карта сумасшедшая:

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

Где я ошибся?

Глядя на другие фрагменты code, я не могу понять, как это сделать.


person Monica Heddneck    schedule 06.02.2016    source источник
comment
Я быстро просмотрел ваши данные. Если не ошибаюсь, в ваших данных нет данных для полигонов. Например, AL имеет несколько строк, и все они имеют одинаковые широту и долготу. Если вы хотите нарисовать карту Штатов, вам понадобится другой набор данных, который вы можете найти в пакете maps или пакете coroplethr. Другое дело, что у вас есть несколько лет для некоторых штатов. Интересно, нужно ли вам агрегировать данные перед созданием карты. В противном случае, возможно, вам нужно было бы выбрать конкретные годы, которые вам нужны?   -  person jazzurro    schedule 06.02.2016
comment
Если вы хотите нарисовать карту Штатов, вам понадобится другой набор данных, который вы можете найти в пакете карт или пакете coroplethr. Вы знаете название этого набора данных? И ДА, вы правы, мне нужно выбрать данные только за один год. Наверное, я не понимаю, как на самом деле строится короплет.   -  person Monica Heddneck    schedule 06.02.2016
comment
Я указываю пакет R в комментарии. Пожалуйста, взгляните на CRAN maul или любой другой источник. Для подмножества данных вы можете найти информацию о SO и многих других местах. :)   -  person jazzurro    schedule 06.02.2016
comment
ах... чтение этого руководства помогло мне разобраться. cran.r-project.org/web/ пакеты/хороплет/виньетки/   -  person Monica Heddneck    schedule 06.02.2016


Ответы (1)


Вы можете построить хороплет следующим образом:

library(ggplot2)
library(XML)
tab <- readHTMLTable("http://www.50states.com/abbreviations.htm", which=1)
df$region <- tolower(tab[match(df$State, tab[, 2]), 1])
states <- map_data("state")
choro <- merge(states, df, sort = FALSE, by = "region")
choro <- choro[order(choro$order), ]
ggplot(choro, aes(long, lat.x)) +
  geom_polygon(aes(group = group, fill = Count), colour="grey55") +
  coord_quickmap() + 
  facet_wrap(~Year)

Во-первых, вы должны сопоставить названия регионов в df$State с названиями в states$region. Затем данные карты объединяются с вашим фреймом данных и упорядочиваются. Наконец, сюжет — это кусок пирога с использованием ggplot.

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

person lukeA    schedule 06.02.2016