基になるジオメトリの形状 (つまり、物理的な境界)と、関連付けられた値に関するオブジェクトの相対的な重要性の両方を伝えるマップを R で作成しようとしています。
具体的には、次のマップ (のバージョン) を再現することに焦点を当てたいと思います* (ポーリング データが見つからないため、色ではなく形):
また、アラスカとハワイが、測地学的に正しい位置ではなく、米国の下に表示されるようにすることにも煩わされたくありません。
たとえば、次のように、データを重みとマージするだけです。
1.ポリゴンを取得する
library(maptools)
library(data.table) #not strictly necessary but I prefer it
#US states downloaded (500k resolution) from:
#https://www.census.gov/geo/maps-data/data/cbf/cbf_state.html
us.states<-
readShapePoly("~/Desktop/cb_2014_us_state_5m.shp")
setDT(us.states@data)
#for getting rid of territories, AK, HI
states<-sprintf("%02d",1:59)
ak.hi<-c("02","15")
us.states.contig<-
us.states[us.states@data$STATEFP %in%
setdiff(states,ak.hi),]
#Unadorned plot
plot(us.states.contig)
text(coordinates(us.states.contig),
us.states.contig@data[,paste0(STUSPS)],
cex=.7)
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)
この最後のグラフは、問題の核心を突いています。提示された最初のグラフは、マップの赤と青の割合から共和党と民主党のどちらが勝ったかを判断できるという意味ではるかに優れています。最も共和党の州は人口が最も少ない州でもあるため、この最後のマップは誤解を招く可能性があります。
選挙人団における各州の相対的な重要性を伝える、この地図の歪んだバージョンを作成する方法はありますか? おそらく主に、このタイプのグラフに標準的な名前があるかどうかわからないため、オンラインでヘルプを見つけることができませんでした。
*この地図はここで見つかりました; エコノミストなどで、以前に同様のサイズの歪んだマップを見たことがあります。プリンストンの選挙コンソーシアムのサム・ワン博士の作品に基づいており、ドリュー・セイラーによって制作されたようです。