R语言绘制动态热力地图

偶然记起去年一位朋友微信发我一份花旗国大选数据,请教我如何画动态统计图。我抄起键盘改了改他的代码跑通了。这份数据包含了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,分享好玩的数据分析
扫码关注公众号ApocalypseNow,分享好玩的数据分析

猜你喜欢

转载自blog.csdn.net/Higherbrothers/article/details/109633006