R语言绘制动态热力地图

   日期:2020-11-17     浏览:121    评论:0    
核心提示:下面的R代码是美国历年大选 支持率热力地图,具体代码实现如下:library(maps)library(animation)library(viridis)library(data.table)setwd('E:/some_code/Rbasic/election_dy_plot')election = fread('./elections.csv')presidenten = fread('president.csv')election[,`:=`(sharedem = dem/(re

偶然记起去年一位朋友微信发我一份花旗国大选数据,请教我如何画动态统计图。我抄起键盘改了改他的代码跑通了。这份数据包含了1960-2012年花旗国历次大选的投票人数(精确到县级)。我们使用map()函数就能很容易地为地图着色。

唯一创新的点在于我使用了viridis包里的调色盘数据,转化成rgb颜色进行填充。这里本来准备按照惯例使用红蓝配色,但由于着色区域太多,颜色显得很暗。故改为从黄色到蓝色的色谱。

为了给每一幅图片配上相应的图例,我收集了每一任统领姓名、当选年份与对应社团的信息。这些信息被存在president.csv文件里,然后绘制每幅图的时候配上相应年份的信息就行了。

library(maps)
library(animation)
library(viridis)
library(data.table)

setwd('E:/election_dy_plot')
election = fread('./elections.csv')
presidenten = fread('president.csv')

election[, `:=`(sharedem = dem / (rep + dem + other),
                sharerep = rep / (rep + dem + other))]

data(viridis.map) # a viridis palette
setDT(viridis.map)
viridis.map = viridis.map[opt == 'C', ]
coldt = viridis.map[election[, sharerep * 250], ][, opt := NULL]
election[, county.col := rgb(coldt[, R], coldt[, G], coldt[, B])]

one = viridis.map[0.125 * 250, ]
two = viridis.map[0.375 * 250, ]
thre = viridis.map[0.625 * 250, ]
fo = viridis.map[0.875 * 250, ]

fi = rgb(one[, 1], one[, 2], one[, 3])
se = rgb(two[, 1], two[, 2], two[, 3])
thr = rgb(thre[, 1], thre[, 2], thre[, 3])
fr = rgb(fo[, 1], fo[, 2], fo[, 3])
colors = c(fr, thr, se, fi)

saveGIF({ 
  for (i in seq(1960, 2012, 4)) { 
    # 1960-2012 loop every 4 year
    thisyear = subset(election, year == i)
    map(database = "county",
        # plot by year
        col = thisyear[,county.col],
        fill = T)
    tit = paste('United States Presidential Election:', i) # get every year title
    title(tit, cex.main = 1.3) # Add title
    sub = subset(presidenten, year == i)
    ps = paste('Winner:', sub[, 2], '-', sub[, 3]) # get every year winner
    mtext(ps, side = 1, cex = 1.1)
    leg.txt = c("75-100%", "50-75%", "25-50%", "0-25%")
    legend(
      "bottomright",
      leg.txt,
      fill = colors,
      title = ("Republican %"),
      cex = 0.83
    )
  }
} , movie.name = "election_en.gif",
interval = 2) # set every plot stay time


如果将图例和president.csv文件改为中文,也可以画出个中文版的:

注意,最后使用animation输出gif图片需要安装ImageMagick。具体方法上网搜肯定能解决,时间太久远记不得怎么弄了。
最近工作中很少用到R,但是R的一些可视化功能仍然强大,这篇就算做个归档吧。

文中使用的数据,点击下载。


扫码关注公众号ApocalypseNow,分享好玩的数据分析

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服