Проблема картографирования в R - PullRequest
2 голосов
/ 13 апреля 2010

РЕДАКТИРОВАТЬ: я понял источник моей проблемы. У меня есть информация только для округов, для которых у меня есть данные, которые меньше, чем количество округов в районе, против которого я строю планы.

Разумеется, проблемные строки кода здесь:

mapnames <- map("county",plot=FALSE)[4]$names
colorsmatched <- d$colorBuckets [na.omit(match(mapnames ,d$stcon))]

Есть ли у кого-нибудь советы о том, как из библиотеки карт создать вектор соответствующей длины, который бы соответствовал количеству округов в Нью-Йорке, Нью-Джерси, Коннектикуте и Пенсильвания? Я хочу объединить данные подсчета, которые у меня есть, и включить нули для округов, о которых у меня нет информации.

Я пытаюсь следовать описанному здесь руководству: http://www.thisisthegreenroom.com/2009/choropleths-in-r/

Приведенный ниже код выполняется, но он либо не соответствует моему набору данных с данными maps_counties должным образом, либо не отображает его в том порядке, в котором я ожидал. Например, результирующие области для большей области Нью-Йорка не показывают плотности, в то время как случайные графства в РА показывают самую высокую плотность.

Общий формат моей таблицы данных:

county state count
fairfield connecticut 17
hartford connecticut 6
litchfield connecticut 3
new haven connecticut 12
...
...
westchester new york 70
yates new york 1
luzerne pennsylvania 1

Обратите внимание, что эти данные приведены в порядке по штатам, а затем по округам и включают в себя данные для CT, NJ, NY, & PA.

Сначала я прочитал в своем наборе данных:

library(maps)
library(RColorBrewer)
d <- read.table("gissum.txt", sep="\t", header=TRUE)

#Concatenate state and county info to match maps library
d$stcon <- paste(d$state, d$county, sep=",")

#Color bins
colors = brewer.pal(5, "PuBu")
d$colorBuckets <- as.factor(as.numeric(cut(d$count,c(0,10,20,30,40,50,300))))

Вот мое соответствие

mapnames <- map("county",plot=FALSE)[4]$names
colorsmatched <- d$colorBuckets [na.omit(match(mapnames ,d$stcon))]

Заговор:

map("county"
  ,c("new york","new jersey", "connecticut", "pennsylvania")
  ,col = colors[d$colorBuckets[na.omit(match(mapnames ,d$stcon))]]
  ,fill = TRUE
  ,resolution = 0
  ,lty = 0
  ,lwd= 0.5
)
map("state"
  ,c("new york","new jersey", "connecticut", "pennsylvania")
  ,col = "black"
  ,fill=FALSE
  ,add=TRUE
  ,lty=1
  ,lwd=2
)

map("county"
   ,c("new york","new jersey", "connecticut", "pennsylvania")
   ,col = "black"
   ,fill=FALSE
   ,add=TRUE
  , lty=1
  , lwd=.5
)
title(main="Respondent Home ZIP Codes by County")

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

1 Ответ

0 голосов
/ 14 апреля 2010

Вот возможное решение вашей проблемы путем объединения ваших данных с данными из карт отдельных штатов. Это то, что вы искали?

library(maps);
library(RColorBrewer);

# Create Dummy Data Frame to Play With

d = rbind(c('fairfield','connecticut',17),c('westchester','new york',70), c('luzerne','pennsylvania',1));
d = data.frame(d);
names(d) = c("county", "state", "count");
d$count = as.numeric(as.character(d$count));
d$stcon = paste(d$state, d$county, sep=",");

# Extract mapnames for States

mapnames2 = map("county",c("new york","new jersey", "connecticut", "pennsylvania"),plot=FALSE)[4]$names;
mapnames2 = data.frame(mapnames2);
names(mapnames2) = "stcon";

# Merge with d

d = merge(mapnames2, d, all = T);
d$count[is.na(d$count)] = 0;


# Color bins
colors = brewer.pal(5, "PuBu");
d$colorBuckets = as.factor(as.numeric(cut(d$count,c(0,10,20,30,40,50,300))));

map("county"
  ,c("new york","new jersey", "connecticut", "pennsylvania")
  ,col = colors[d$colorBuckets]
  ,fill = TRUE
  ,resolution = 0
  ,lty = 0
  ,lwd= 0.5
)
map("state"
  ,c("new york","new jersey", "connecticut", "pennsylvania")
  ,col = "black"
  ,fill=FALSE
  ,add=TRUE
  ,lty=1
  ,lwd=2
)

map("county"
   ,c("new york","new jersey", "connecticut", "pennsylvania")
   ,col = "black"
   ,fill=FALSE
   ,add=TRUE
  , lty=1
  , lwd=.5
)
title(main="Respondent Home ZIP Codes by County")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...