Я пытаюсь создать карту в R, которая передает как форму базовой геометрии (т. е. физические границы), и относительную важность объекта с точки зрения связанного значения.
Для конкретики я хотел бы сосредоточиться на воспроизведении (версии) следующей карты* (формы, а не столько цвета, поскольку я не могу найти данные опроса):
2. Добавьте данные Коллегии выборщиков
#scraped from government page
library(rvest) #only necessary to scrape table
electoral.college.url<-
paste0("http://www.archives.gov/federal-register/",
"electoral-college/allocation.html")
electoral.college.dt<-
(html(electoral.college.url) %>%
html_nodes("table"))[[5]] %>%
html_table()
setDT(electoral.college.dt)
setnames(electoral.college.dt,c("State","Votes"))
#merge into geodata
us.states.contig@data<-
copy(us.states.contig@data)[
electoral.college.dt,electoral.votes:=i.Votes,
on=c(NAME="State")]
#plot, coloring each state by size
states.ranked<-
us.states.contig@data[,rank(electoral.votes,
ties.method="first")]
cols<-colorRampPalette(c("red","blue"))(51)[states.ranked]
plot(us.states.contig,col=cols)
Это все хорошо — взглянув на эту карту, мы можем сказать, какие штаты имеют высокое и низкое представительство в коллегии выборщиков. Но что, если (как в нашей целевой карте) мы хотим представить другую переменную цветом состояния?
3. Добавьте результаты выборов 2012 г.
#scrape again
#2012 Election Results by State
election.wiki<-
paste0("https://en.wikipedia.org/wiki/",
"United_States_presidential_election,_2012")
results<-
html(election.wiki) %>%
html_node(xpath='//*[@id="mw-content-text"]/div[22]/table') %>%
html_table()
#eliminate second header row, delete final row,
# keep only the important columns
results.trim<-results[2:(nrow(results)-1),c(1,4,21)]
colnames(results.trim)<-c("name","pct","abbr")
results.dt<-setDT(results.trim)
#data idiosyncrasies, see Wiki page
results.dt<-results.dt[!grepl("–",abbr)|grepl("a",abbr)]
results.dt[grepl("–",abbr),abbr:=gsub("–.*","",abbr)]
results.dt[,"pct":=as.numeric(gsub("%","",pct))]
#merge
us.states.contig@data<-
copy(us.states.contig@data
)[results.dt,vote.pct:=i.pct,
on=c(STUSPS="abbr")]
pcts<-us.states.contig@data[,vote.pct]
cols<-c("red","blue")[(pcts>=50)+1L]
tx.col<-c("white","black")[(cols=="red")+1L]
plot(us.states.contig,col=cols)
text(coordinates(us.states.contig),
us.states.contig@data[,paste0(STUSPS)],
col=tx.col)
Этот последний график раскрывает суть проблемы. Первый представленный график намного лучше в том смысле, что по процентному соотношению красных и синих на карте мы можем определить, победили ли республиканцы или демократы; эта последняя карта вводит в заблуждение, потому что большинство республиканских штатов также являются самыми малонаселенными.
Есть ли способ создать искаженную версию этой карты, которая передает относительную важность каждого штата в коллегии выборщиков? Я не смог найти никакой помощи в Интернете, возможно, главным образом потому, что я не знаю, есть ли стандартное название для этого типа графика.
*Эта карта была найдена здесь; Я уже видел подобные искаженные по размеру карты, например. в The Economist. Похоже, что он основан на работе доктор Сэм Ван из Принстонского избирательного консорциума, продюсером которого выступил Дрю Талер.
Rcartogram
туманным / плохо документированным / предназначенным только для экспертов, другими словами, кривая обучения использованиюRcartogram
довольно крутая. Ответ на другой вопрос, связанный здесь, упрощает это, и мы можем найти другие экземпляры пользователей, пытающихся понять, как использовать пакет. - person MichaelChirico   schedule 07.09.2015