2015-03-19 2 views
0

Я скопировал Choropleth Map с кодом, предоставленным Хэдли. Мои данные - это csv, в котором указано название страны, нет. Убийство пыталось, нет. of Assaultand no. изнасилования. Мне нужно построить географическую карту тепла страны, где самый темный цвет будет представлять большее количество преступлений в этом состоянии и так далее.Choropleth Map Challenge Объяснение // Необходимость репликации в моих данных

код: (который я пытаюсь повторить)

library(ggplot2) 
library(maps) 
unemp2 <- read.csv("USA_State.csv", header = T, stringsAsFactors = F) 

county_df1 <- map_data("state") 

names(county_df1) <- c("long", "lat", "group", "order", "state", "state1") 
county_df1$state1 <- NULL 

state_df <- map_data("state") 

# Combine together 
choropleth <- merge(county_df1, unemp2, by = c("state")) 
choropleth <- choropleth[order(choropleth$order), ] 
# Discretise rate to use with Brewer colour scheme - many options here 
# choropleth$rate_d <- cut_number(choropleth$rate, 5) 
# choropleth$rate_d <- cut_interval(choropleth$rate, 5) 
# Nathan's choice is a little odd: 
choropleth$rate_d <- cut(choropleth$Assault, breaks = c(seq(0, 10, by = 2), 35)) 

# Once you have the data in the right format, recreating the plot is straight 
# forward. 
library(scales) 
ggplot(choropleth, aes(long, lat, group = group)) + 
    geom_polygon(aes(fill = rate_d), colour = alpha("white", 1/2), size = 0.2) + 
    geom_polygon(data = state_df, colour = "white", fill = NA) + 
    scale_fill_brewer(palette = "PuRd") 

# Takes a while to draw because ggplot2 not very efficient with large numbers 
# of polygons :(
#

часть, где «choropleth $ rate_d» создается, я не знаю, как использовать это в моих данных. Я не очень понимаю об этом. Может кто-нибудь объяснить мне оригинальный код или помочь с моим кодом. Дайте мне знать, если я не ясно

+0

Я считаю, что часть кода нарушает ставки одного или нескольких преступлений в «ведра», что создает фактор. Этот фактор определяет цвет каждого состояния. Так, например, все состояния со скоростью в самом низком ковше будут иметь один и тот же цвет. – lawyeR

ответ

2

Существует буквально множество кода о том, как генерировать choropleths в ggplot2 всей SO и интернет. Следующий код создает некоторые данные, так как вы не предоставили какие-либо и дает базовый шаблон с правильной проекцией:

library(ggplot2) 
library(scales) 

# Cleans the canvas well for a map ---------------------------------------- 

theme_map <- function(base_size=9, base_family="") { 
    require(grid) 
    theme_bw(base_size=base_size, base_family=base_family) %+replace% 
    theme(axis.line=element_blank(), 
      axis.text=element_blank(), 
      axis.ticks=element_blank(), 
      axis.title=element_blank(), 
      panel.background=element_blank(), 
      panel.border=element_blank(), 
      panel.grid=element_blank(), 
      panel.margin=unit(0, "lines"), 
      plot.background=element_blank(), 
      legend.justification = c(0,0), 
      legend.position = c(0,0) 
    ) 
} 

# Generate some data ------------------------------------------------------ 

set.seed(100) 
choro_data <- data.frame(region=tolower(state.name), 
         Murder=sample(1:20, length(state.name), replace=TRUE), 
         Assault=sample(c(1:10, 35), length(state.name), replace=TRUE), 
         Rape=sample(1:40, length(state.name), replace=TRUE), 
         stringsAsFactors=FALSE) 

choro_data$rate_d <- cut(choro_data$Assault, breaks = c(seq(0, 10, by = 2), 35)) 

# The core choropleth code ------------------------------------------------ 

us <- map_data("state") 
us <- fortify(us, region="region") 

# plot -------------------------------------------------------------------- 

gg <- ggplot() 
gg <- gg + geom_map(data=us, map=us, 
        aes(x=long, y=lat, map_id=region, group=group), 
        fill="white", color="white", size=0.25) 
gg <- gg + geom_map(data=choro_data, map=us, 
        aes(fill=rate_d, map_id=region), 
        color="#7f7f7f", size=0.25) 
gg <- gg + coord_map("albers", lat0=39, lat1=45) 
gg <- gg + scale_fill_brewer(name="Rate") 
gg <- gg + theme_map() 
gg <- gg + theme(legend.position="right") 
gg 

enter image description here

Два geom_map вызовов делают возможным иметь кадр данных значений которые могут иметь недостающие идентификаторы области (и экономит время от необходимости связывать кучу данных с самой картой). Первый geom_map рисует многоугольники базовой карты, заполняется второй слой. Для этого нужно еще несколько эстетических работ (границы, шрифты, ярлыки легенд очистки и т. Д.), Но мне пришлось оставить .

Я бы настоятельно предложил упорядоченную горизонтальную гистограмму для данных, которые вы пытаетесь представить. Я сомневаюсь, что география даст какое-либо представление об этом.

+0

Было бы здорово, если бы этот 'theme_map' был включен в пакет' ggthemes'. Если у вас нет времени, я сделаю запрос на тяну к вам. – Gregor

+1

Я не думал об этом @ Грегоре. Совершенно крутая идея. Я буду вилкой и сделаю это сегодня. – hrbrmstr

+0

@hrbrmstr: не могли бы вы добавить примечание для объяснения% + replace%? – lawyeR

Смежные вопросы