library(tidyverse)
library(plotly)
library(scales)
library(ggrepel)
library(DT)
library(RColorBrewer)
library(showtext)
library(here)
font_add_google("News Cycle","news-cycle")
showtext_auto()
candidatos_df <- tribble(
~cod, ~nombre, ~color_cand,
"ic", "Iván Cepeda", "#A52E94",
"adle", "Abelardo de la Espriella", "#000066",
"vd", "Vicky Dávila","#A11E4E",
"sf", "Sergio Fajardo", "#442F7E",
"jmg", "Juan Manuel Galán", "#BE1100",
"jcp", "Juan Carlos Pinzón", "#23C062",
"pv", "Paloma Valencia", "#63B9E9",
"cl", "Claudia López", "#00B399",
"ep", "Enrique Peñalosa","#0BDA51",
"jdo", "Juan Daniel Oviedo","#F0E60D",
"voto_blanco","Voto en blanco", "#FFFFFF",
"ns_nr", "No sabe-No responde", "#EAECF0",
"ruido","Ruido","black"
)
encuestas_2026 <- readr::read_csv(here("elecciones","2026-colombia","2026-01-26-entrada","encuestas_2026.csv")) |>
dplyr::mutate(
fecha = lubridate::mdy(fecha),
encuesta_id = 1:n(),
encuestadora = factor(encuestadora),
cand_ruido = 1 - rowSums(across(-c("fecha","encuesta_id", "encuestadora", "muestra", "voto_blanco","ns_nr")), na.rm = TRUE)) |>
tidyr::pivot_longer(
cols = starts_with("cand"),
names_to = "candidato",
values_to = "int_voto")
# Grafica ####
entrada_2026 <- encuestas_2026 |>
dplyr::mutate(candidato = str_sub(candidato, start = 6L)) |>
dplyr::left_join(candidatos_df, by = c("candidato" = "cod")) |>
dplyr::filter(candidato != "ruido", !is.na(int_voto)) |>
ggplot(aes(x = fecha, y = int_voto, color = nombre,
text = paste0(nombre, ": ", scales::percent(int_voto, accuracy = 0.1),
"<br>", encuestadora, " (", format(fecha, "%d-%b"), ")"))) +
geom_point(aes(shape = encuestadora), size = 4, alpha = 0.85) +
scale_color_manual(values = setNames(candidatos_df$color_cand, candidatos_df$nombre)) +
scale_y_continuous(labels = percent_format(accuracy = 1)) +
guides(shape = "none") +
labs(x = NULL, y = "Intención de voto", color = NULL) +
theme_minimal() +
theme(legend.position = "bottom")
#ggplotly ####
ggplotly(entrada_2026, tooltip = "text") |>
layout(legend = list(orientation = "h", y = -0.15, x = 0.5, xanchor = "center"))