用R語言復盤美國總統大選
這兩天最火的新聞莫過於美國總統大選了,各種社交媒體都被瘋狂刷屏。
雖然已經過去兩天了,但是本小編還是決定來湊個熱鬧,用R語言來複盤希拉里阿姨和川普大叔各州選票及支持率的分布情況。
為了做這一期專題,本寶寶起了個大清早,使出了渾身解數,補腦了一天美國總統選舉制度介紹和各種專題報道!
本篇內容不涉及深入的文字分析(前天已經推送過一篇報道了),主要以講解美國選舉結果的可視化地圖為主,是很乾的乾貨,所以接下來準備好接受眼花繚亂的代碼轟炸吧哈哈~_~
【2】
我是分割線~
R語言配置環境:
Rgui:R X64 3.3.2
RStudio 1.0.44
載入所需包:
library("ggplot2")
library("RColorBrewer")
library("maptools")
library("plyr")
library("rJava")
地圖數據讀取:
American_map <-readShapePoly("C:/rstudy/USA_map/STATES.SHP")
AD1 <- American_map@data
AD2 <- data.frame(id=rownames(AD1),AD1)
American_map1 <- fortify(American_map)
American_map_data <- join(American_map1,AD2, type = "full")
American_map_data<-American_map_data[,1:12]
提取各州數據集:
mydata<-data.frame(STATE_NAME=unique(American_map_data$STATE_NAME),STATE_ABBR=unique(American_map_data$STATE_ABBR))
write.table (mydata, file ="D:\R\File\President.csv", sep =",", row.names =FALSE)
newdata<-read.csv("D:\R\File\President.csv")
###
以上步驟中前兩句代碼是我初次練習時使用地圖數據提取的美國各州州名及簡稱數據,導出後用於添加大選的各州選票信息,最後再次導入,整理過的投票信息數據文件President.csv我會一併分享給大家,所以大家用的時候可以直接導入即可,直接忽略前兩句代碼
分離大陸與夏威夷、阿拉斯加:
data1<-subset(American_map_data,STATE_NAME!="Alaska"& STATE_NAME!="Hawaii")
data2<-subset(American_map_data,STATE_NAME=="Hawaii")
data3<-subset(American_map_data,STATE_NAME=="Alaska")
更改阿拉斯加與夏威夷坐標併合並:
data2$long<-data2$long+65
data3$long<-data3$long+40
data3$lat<-data3$lat-42
data4<-rbind(data1,data2,data3)
合併地理信息數據與選舉數據:
American_data <- join(data4, newdata, type="full")
提取各州中心經緯度指標:
midpos <- function(AD1){mean(range(AD1,na.rm=TRUE))}
centres <- ddply(American_data,.(STATE_ABBR),colwise(midpos,.(long,lat)))
合併各州中心經緯度數據與選票數據:
mynewdata<-join(centres,newdata,type="full")
接下來將會以四個數據地圖的形式向大家展示美國總統大選結果中,各州選票分布,以及各州對希拉里、川普的支持率可視化信息。
【3】
1.1 美國總統大選各州選舉人票數分布:
1.2 美國總統大選投票結果雙方獲勝州分布情況:ggplot()+
geom_polygon(data=American_data,aes(x=long,y=lat,group=group),colour="grey",fill="white")+
geom_point(data=mynewdata,aes(x=long,y=lat,size=Count,fill=Count),shape=21,colour="black")+
scale_size_area(max_size=10)+
scale_fill_gradient(low="white",high="#D73434")+
coord_map("polyconic") +
theme(
panel.grid = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
legend.position ="none"
)
1.3 希拉里各州選票支持率統計:ggplot(American_data,aes(x=long,y=lat,group=group,fill=Results))+
geom_polygon(colour="white")+ scale_fill_manual(values=c("#19609F","#CB1C2A"),labels=c("Hillary", "Trump"))+
coord_map("polyconic") +
guides(fill=guide_legend(title=NULL))+
theme(
panel.grid = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
legend.position ="top"
)
1.4 川普各州選票支持率統計:qa <- quantile(na.omit(American_data$Clinton), c(0,0.2,0.4,0.6,0.8,1.0))
American_data$Clinton_q<-cut(American_data$Clinton,qa,labels = c("0-20%", "20-40%","40-60%","60-80%", "80-100%"),include.lowest = TRUE)
ggplot(American_data,aes(long,lat,group=group,fill=Clinton_q))+
geom_polygon(colour="white")+
scale_fill_brewer(palette="Blues")+
coord_map("polyconic") +
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
theme(
panel.grid = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
legend.position = c(0.18,0.75),
legend.text.align=1
)
qb <- quantile(na.omit(American_data$Trump), c(0,0.2,0.4,0.6,0.8,1.0))
American_data$Trump_q<-cut(American_data$Trump,qb,labels = c("0-20%", "20-40%","40-60%","60-80%", "80-100%"),include.lowest = TRUE)
ggplot(American_data,aes(long,lat,group=group,fill=Trump_q))+
geom_polygon(colour="white")+
scale_fill_brewer(palette="Reds")+
coord_map("polyconic") +
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
theme(
panel.grid = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
legend.position = c(0.18,0.75),
legend.text.align=1
)
【4】
以上所有數據信息均來源於CNN官網:
CNN - Breaking News, U.S., World, Weather, Entertainment & Video News
地圖數據、投票數據、代碼數據已打包共享:
https://pan.baidu.com/s/1nvJbomt
作為R語言初學者,代碼寫的很爛,喜歡的小盆友點個like,大神求輕噴~
EasyCharts團隊出品
帥的人都關注了EasyCharts團隊^..^~
QQ交流群:454614789
微信公眾號:EasyCharts
更多信息敬請查看: http://easychart.github.io/post/Easycharts/
推薦閱讀:
※仿ECO事件圓環圖
※左手用R右手Python系列12——空間數據可視化與數據地圖
※降維打擊-觀察高維世界
※千里挑一的我乎漂亮妹子照片牆(數據初探3)
※R語言可視化——ggplot圖表系統中的輔助線