The Davidson County election results have plenty of favorable trends for the Democratic candidate, Kamala Harris. First thing that is blatantly obvious thanks to our map, North Nashville leans left. With Harris running away with percentages like 88.6% in precinct 2-2, and 89% in precinct 1-7. When you look to the chart, one of the largest surprises was just how many votes she received in what is considered to be a state dominated by the Republican Party. Harris ran away with many of the precincts of Davidson County.
if (!require("tidyverse"))
install.packages("tidyverse")
if (!require("mapview"))
install.packages("mapview")
if (!require("sf"))
install.packages("sf")
if (!require("leaflet"))
install.packages("leaflet")
if (!require("leaflet.extras2"))
install.packages("leaflet.extras2")
if (!require("plotly"))
install.packages("plotly")
library(tidyverse)
library(mapview)
library(sf)
library(leaflet)
library(leafpop)
library(readxl)
library(plotly)
# Getting the election data
VoteData <- read.csv("https://github.com/drkblake/Data/raw/refs/heads/main/Davidson_Vote_Data.csv")
# Getting the map
download.file("https://github.com/drkblake/Data/raw/refs/heads/main/Davidson_Precincts.zip","DavidsonPrecinctMap.zip")
unzip("DavidsonPrecinctMap.zip")
MapInfo <- read_sf("Davidson_Precincts.shp")
# Enhancing the data
VoteData2 <- VoteData %>%
mutate(Total = Trump + Harris + Other,
Pct_Trump = round((Trump / Total)*100,1),
Pct_Harris = round((Harris / Total)*100,1),
Pct_Other = round((Other / Total)*100,1),
Margin_Trump = Trump - Harris,
Margin_Harris = Harris - Trump,
Winner = case_when(Trump > Harris ~ "Trump",
Harris > Trump ~ "Harris",
Other > (Trump + Harris) ~ "Other",
.default = "Tie"))
# Merging the data and the map
DataAndMap <- left_join(VoteData2,MapInfo)
# Converting the merged data and map into an sf object
DataAndMap <- st_as_sf(DataAndMap)
mypalette = colorRampPalette(c('blue', 'red'))
# Harris percentage map
mypalette = colorRampPalette(c('red', 'blue'))
PctHarrisMap <- mapview(
DataAndMap,
zcol = "Pct_Harris",
col.regions = mypalette,
map.types = ("OpenStreetMap"),
layer.name = "Pct. Harris",
popup = popupTable(
DataAndMap,
feature.id = FALSE,
row.numbers = FALSE,
zcol = c(
"Precinct",
"Trump",
"Harris",
"Other",
"Total",
"Pct_Trump",
"Pct_Harris",
"Pct_Other",
"Margin_Trump",
"Margin_Harris",
"Winner"
)
)
)
PctHarrisMap
# Sort the data by the Total variable
# and make it stay sorted in the chart
ChartData <- DataAndMap %>%
arrange(Total) %>%
mutate(Precinct = factor(Precinct, levels = Precinct))
# Create and format the chart
Chart <- plot_ly(data = ChartData, orientation = 'h') %>%
add_trace(
x = ~Trump,
y = ~Precinct,
name = 'Trump',
type = 'bar',
marker = list(color = 'red') # We have made the red bars
) %>%
add_trace(
x = ~Harris,
y = ~Precinct,
name = 'Harris',
type = 'bar',
marker = list(color = 'darkblue') # We have added the blue bars
) %>%
add_trace(
x = ~Other,
y = ~Precinct,
name = 'Other',
type = 'bar',
marker = list(color = 'gray') #We have added the gray bars
) %>%
add_trace(
x = ~Other,
y = ~Precinct,
type = 'bar',
name = '',
marker = list(color = 'rgba(0,0,0,0)'),
text = ~Winner,
textposition = 'outside',
showlegend = FALSE # We have added the "winner" labels
) %>%
layout(
barmode = 'stack',
xaxis = list(title = 'Number of Votes'),
yaxis = list(title = 'Precinct',
tickfont = list(size = 10),
automargin = TRUE)) # We have made it a stacked bar chart
# Show the plot
Chart