轉(zhuǎn)帖|使用教程|編輯:我只采一朵|2017-05-25 13:48:09.000|閱讀 2882 次
概述:本篇內(nèi)容不涉及深入的文字分析,主要以講解美國選舉結(jié)果的可視化地圖為主,是很干的干貨
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
作者:杜雨
2016年末最火的新聞莫過于美國總統(tǒng)大選了,各種社交媒體都被瘋狂刷屏。
雖然已經(jīng)過去好幾個月了,但是本小編還是決定來湊個熱鬧,用R語言來復(fù)盤希拉里阿姨和川普大叔各州選票及支持率的分布情況。
本篇內(nèi)容不涉及深入的文字分析(前天已經(jīng)推送過一篇報(bào)道了),主要以講解美國選舉結(jié)果的可視化地圖為主,是很干的干貨,所以接下來準(zhǔn)備好接受眼花繚亂的代碼轟炸吧哈哈~_~
加載所需包:
library("ggplot2")
library("RColorBrewer")
library("maptools")
library("plyr")
library("rJava")
地圖數(shù)據(jù)讀取:
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]
提取各州數(shù)據(jù)集:
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")
以上步驟中前兩句代碼是我初次練習(xí)時使用地圖數(shù)據(jù)提取的美國各州州名及簡稱數(shù)據(jù),導(dǎo)出后用于添加大選的各州選票信息,最后再次導(dǎo)入,整理過的投票信息數(shù)據(jù)文件President.csv我會一并分享給大家,所以大家用的時候可以直接導(dǎo)入即可,直接忽略前兩句代碼。
分離大陸與夏威夷、阿拉斯加:
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")
更改阿拉斯加與夏威夷坐標(biāo)并合并:
data2$long<-data2$long+65
data3$long<-data3$long+40
data3$lat<-data3$lat-42
data4<-rbind(data1,data2,data3)
合并地理信息數(shù)據(jù)與選舉數(shù)據(jù):
American_data <- join(data4, newdata, type="full")
提取各州中心經(jīng)緯度指標(biāo):
midpos <- function(AD1){mean(range(AD1,na.rm=TRUE))}
centres <- ddply(American_data,.(STATE_ABBR),colwise(midpos,.(long,lat)))
合并各州中心經(jīng)緯度數(shù)據(jù)與選票數(shù)據(jù):
mynewdata<-join(centres,newdata,type="full")
接下來將會以四個數(shù)據(jù)地圖的形式向大家展示美國總統(tǒng)大選結(jié)果中,各州選票分布,以及各州對希拉里、川普的支持率可視化信息。
美國總統(tǒng)大選各州選舉人票數(shù)分布:
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.2 美國總統(tǒng)大選投票結(jié)果雙方獲勝州分布情況:
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"
)
希拉里各州選票支持率統(tǒng)計(jì):
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
)
川普各州選票支持率統(tǒng)計(jì):
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
)
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn