Populationsgewichtete Polygonverzerrung (Kartogramme)

Ich versuche, eine Karte in R zu erstellen, die sowohl die Form der zugrunde liegenden Geometrie (d. H. Die physischen Grenzen) angibt.un die relative Bedeutung des Objekts in Bezug auf einen zugeordneten Wert.

Aus Gründen der Vollständigkeit möchte ich mich auf die Reproduktion (einer Version von) der folgenden Karte konzentrieren * (das Formen, nicht so sehr dasFarbe da ich die Abfragedaten nicht finden kann):

Ich möchte auch nicht Alaska und Hawaii dazu bringen, unter den USA zu erscheinen, anstatt an ihren geodätisch korrekten Orten.

Ich bin nur soweit, dass die Daten mit den Gewichten zusammengeführt werden, zum Beispiel wie folgt:

1. Holen Sie sich Polygone
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. Wahlkollegium Daten hinzufügen
#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)

Das ist alles schön und gut - mit einem Blick auf diese Karte können wir feststellen, welche Bundesländer im Wahlkollegium hoch und niedrig vertreten sind. Was aber, wenn wir (wie in unserer Zielkarte) eine andere Variable mit der Farbe des Staates darstellen wollen?

3. Addieren Sie die Wahlergebnisse 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)

Diese letzte Grafik bringt den Kern des Problems auf den Punkt. Die erste dargestellte Grafik ist in dem Sinne weit überlegen, dass wir anhand des Prozentsatzes Rot gegen Blau auf der Karte erkennen können, ob die Republikaner oder Demokraten gewonnen haben. Diese letzte Karte ist irreführend, da die meisten republikanischen Staaten auch am dünnsten besiedelt sind.

ibt es eine Möglichkeit, eine verzerrte Version dieser Karte zu erstellen, die die relative Bedeutung jedes Staates im Wahlkollegium wiedergibt? Ich konnte online keine Hilfe finden, vielleicht hauptsächlich, weil ich nicht weiß, ob es einen Standardnamen für diesen Diagrammtyp gibt.

* Diese Karte wurde gefundenHie; Ich habe bereits Karten mit ähnlicher Größenverzerrung gesehen, z. imDer Ökono. Es scheint, dass es auf der Arbeit von @ basieDR. Sam Wang beim Princeton Election Consortium und wurde produziert vonDrew Thaler.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage