Este é o mapa eleitoral com votação por zona do excelentissimo vereador Milton Leite. Aquele bacana.

Setup: data.table -> função fread para ler CSV grande mais rapido dplyr -> pq tem pipes %>% fofos maptools, rgdal, scales -> para carregar e fortificar shapes ggplot -> para plotar os graficos

require(dplyr)
library(data.table)
library(maptools)
library(rgdal)
library(ggplot2)
library(scales)
gpclibPermit()

Primeiro carregamos o CSV de votações por municipio/zona do TSE:

Agora selecionamos o Milton Leite. Não esquecer de converter o campo V29 para número (da pra passar como parametro pro fread tb)

Carregamos o Shape (acho que foi o Bramatti que me passou)

shape <- readOGR("/home/markun/devel/eleicoes2016/shape", "zonaseleitorais2")
OGR data source with driver: ESRI Shapefile 
Source: "/home/markun/devel/eleicoes2016/shape", layer: "zonaseleitorais2"
with 58 features
It has 2 fields

‘Fortificamos’ o Shape. Isso é conectamos ele com os votos por zona dando um match no Id do shape e no campo correspondente da tabela.

E por fim, plotamos o gráfico! data é o nosso shape já fortificado. o X e Y da nossa aestethics são lat e lng. fill é a quantidade de votos (lembre de converter pra número).

LS0tCnRpdGxlOiAiQ3JpYW5kbyB1bSBtYXBhIGVsZWl0b3JhbCBubyBSIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpFc3RlIMOpIG8gbWFwYSBlbGVpdG9yYWwgY29tIHZvdGHDp8OjbyBwb3Igem9uYSBkbyBleGNlbGVudGlzc2ltbyB2ZXJlYWRvciBNaWx0b24gTGVpdGUuIEFxdWVsZSBiYWNhbmEuCgpTZXR1cDoKZGF0YS50YWJsZSAtPiBmdW7Dp8OjbyBmcmVhZCBwYXJhIGxlciBDU1YgZ3JhbmRlIG1haXMgcmFwaWRvCmRwbHlyIC0+IHBxIHRlbSBwaXBlcyAlPiUgZm9mb3MKbWFwdG9vbHMsIHJnZGFsLCBzY2FsZXMgLT4gcGFyYSBjYXJyZWdhciBlIGZvcnRpZmljYXIgc2hhcGVzCmdncGxvdCAtPiBwYXJhIHBsb3RhciBvcyBncmFmaWNvcwoKYGBge3IsIGVjaG89VFJVRX0KcmVxdWlyZShkcGx5cikKbGlicmFyeShkYXRhLnRhYmxlKQpsaWJyYXJ5KG1hcHRvb2xzKQpsaWJyYXJ5KHJnZGFsKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoc2NhbGVzKQpncGNsaWJQZXJtaXQoKQpgYGAKCgpQcmltZWlybyBjYXJyZWdhbW9zIG8gQ1NWIGRlIHZvdGHDp8O1ZXMgcG9yIG11bmljaXBpby96b25hIGRvIFRTRToKCmBgYHtyfQp2b3RhY2FvX3JhdyA8LSBmcmVhZCgifi9kZXZlbC9lbGVpY29lczIwMTYvcmF3L2VsZWljYW8yMDE2L3Jlc3VsdGFkby92b3RhY2FvX2NhbmRpZGF0b19tdW56b25hXzIwMTZfU1AudHh0IiwKICAgICAgICAgICAgICAgICAgICBlbmNvZGluZyA9ICdMYXRpbi0xJywKICAgICAgICAgICAgICAgICAgICBoZWFkZXIgPSBGQUxTRSkKaGVhZCh2b3RhY2FvX3JhdykKYGBgCgpBZ29yYSBzZWxlY2lvbmFtb3MgbyBNaWx0b24gTGVpdGUuCk7Do28gZXNxdWVjZXIgZGUgY29udmVydGVyIG8gY2FtcG8gVjI5IHBhcmEgbsO6bWVybyAoZGEgcHJhIHBhc3NhciBjb21vIHBhcmFtZXRybyBwcm8gZnJlYWQgdGIpCgpgYGB7cn0Kdm90YWNhbyA8LSB2b3RhY2FvX3JhdyAlPiUKICBmaWx0ZXIoVjk9PSdTw4NPIFBBVUxPJywgVjE1PT0nTUlMVE9OIExFSVRFJykgJT4lCiAgbXV0YXRlKFYyOT1hcy5udW1lcmljKFYyOSkpCmhlYWQodm90YWNhbykKYGBgCgpDYXJyZWdhbW9zIG8gU2hhcGUgKGFjaG8gcXVlIGZvaSBvIEJyYW1hdHRpIHF1ZSBtZSBwYXNzb3UpCmBgYHtyfQpzaGFwZSA8LSByZWFkT0dSKCIvaG9tZS9tYXJrdW4vZGV2ZWwvZWxlaWNvZXMyMDE2L3NoYXBlIiwgInpvbmFzZWxlaXRvcmFpczIiKQpgYGAKCidGb3J0aWZpY2Ftb3MnIG8gU2hhcGUuIElzc28gw6kgY29uZWN0YW1vcyBlbGUgY29tIG9zIHZvdG9zIHBvciB6b25hIGRhbmRvIHVtIG1hdGNoIG5vIElkIGRvIHNoYXBlIGUgbm8gY2FtcG8gY29ycmVzcG9uZGVudGUgZGEgdGFiZWxhLgoKYGBge3J9CnNoYXBlX2Z0IDwtIGZvcnRpZnkoc2hhcGUsIHJlZ2lvbj0iTmFtZSIpICU+JQogIGxlZnRfam9pbih2b3RhY2FvLCBieT1jKCdpZCc9J1YxMCcpKQpgYGAKCkUgcG9yIGZpbSwgcGxvdGFtb3MgbyBncsOhZmljbyEKZGF0YSDDqSBvIG5vc3NvIHNoYXBlIGrDoSBmb3J0aWZpY2Fkby4KbyBYIGUgWSBkYSBub3NzYSBhZXN0ZXRoaWNzIHPDo28gbGF0IGUgbG5nLgpmaWxsIMOpIGEgcXVhbnRpZGFkZSBkZSB2b3RvcyAobGVtYnJlIGRlIGNvbnZlcnRlciBwcmEgbsO6bWVybykuCgpgYGB7cn0KZ2dwbG90KGRhdGE9c2hhcGVfZnQsIGFlcyh4PWxvbmcseT1sYXQsIGdyb3VwPWdyb3VwLCBmaWxsPXNoYXBlX2Z0JFYyOSkpICsKICBnZW9tX3BvbHlnb24oKSArCiAgZ2VvbV9wYXRoKGNvbG9yPSdibGFjaycpICsgCiAgbGFicyh4PU5VTEwseT1OVUxMLHRpdGxlPSJNaWx0b24gTGVpdGUiKSArCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpKQpgYGAK