Plot.Series {UnalR} | R Documentation |
Cree una serie de tiempo dinámica/estática y flexible con tres diferentes paquetes
Description
Esta función proporciona excelentes herramientas y opciones para la visualización
de series de tiempo dinámicas con el objetivo de estudiar la evolución de una
o varias variables a lo largo del tiempo. Dicha serie interactiva se puede
representar usando tres diferentes librerías que son Highcharter
, Plotly
y Dygraph
, las cuales usan internamente JavaScript
.
Usage
Plot.Series(
datos,
tiempo,
valores,
categoria,
freqRelativa = FALSE,
invertir = FALSE,
ylim,
colores,
titulo = "",
labelX = "Periodo",
labelY = "",
libreria = c("highcharter", "plotly", "dygraphs"),
estilo = NULL,
estatico = FALSE
)
Arguments
datos |
Un data frame, no un objeto clase serie de tiempo o vector numérico. |
tiempo |
Lista de variable(s) tanto numéricas como categóricas que se concatenaran para crear un único periodo temporal (ordenado ascendentemente). |
valores |
Variable numérica que contiene los valores que desea graficar. |
categoria |
Una variable categórica dentro del data frame ingresado en |
freqRelativa |
Si es |
invertir |
Si es |
ylim |
Vector numérico que especifica el límite inferior y superior,
respectivamente, del eje |
colores |
Cadena de caracteres indicando los colores con los cuales se
deben colorear cada una de las series correspondiente a cada nivel del
argumento |
titulo |
Cadena de caracteres indicando el título principal del plot. |
labelX |
Cadena de caracteres indicando la etiqueta del eje |
labelY |
Cadena de caracteres indicando la etiqueta del eje |
libreria |
Cadena de caracteres que indica el paquete con el cual se
realizará la serie. Los valores permitidos son |
estilo |
Lista compuesta por varios parámetros, los cuales van a ser usados de acuerdo con la librería especificada para graficar la serie y cuyo objetivo es personalizar pequeños detalles de ésta.
|
estatico |
Si es |
Details
Al usar el paquete Highcharter
y usar las opciones de descarga, el nombre del
archivo descargado será la concatenación del plot graficado y la categoría usada,
así, por ejemplo, si se graficó la serie de tiempo para la categoría "Sede" el
nombre será PlotSeries_Sede.png
.
Tenga en cuenta que la librería "dygraphs"
solo la podrá usar si dentro del
argumento tiempo ingresa las dos variables (YEAR
, SEMESTRE
) para asemejar
su estructura a los agregados clásicos. En caso contrario le arrojara un error.
Recuerde que puede usar más temas (cualquiera de hecho) de los que se
proporcionan para ggplot2
. Por ejemplo, los de hrbrthemes
o ggtech.
Value
Retorna la serie (objeto widget de HTML) creada. La clase del objeto retornado será un "htmlwidget" y dependiendo de la librería usada pertenecerá adicionalmente a la clase "highchart", "plotly" o "dygraphs".
Lista de argumentos de estilo
Sabemos que puede ser abrumador el número de argumentos dentro del parámetro
estilo
, pero es necesario si queremos ofrecer al usuario la máxima
personalización dentro de cada función usando cualquier librería. Por tal
razón, a continuación, se detalla el listado completo de argumentos, usados
al especificar la librería y en qué función están presentes
(marcado con una × si lo posee).
Librería | estilo$ | Plot.Series() | Plot.Barras() | Plot.Apiladas() | Plot.Boxplot() | Plot.Radar() | Plot.Treemap() | Plot.Torta() | Plot.Drilldown() |
— | gg.Tema | × | × | × | × | ||||
l | gg.Texto | × | × | × | × | ||||
l | gg.Legend | × | × | × | |||||
l | gg.Linea | × | |||||||
l | gg.Punto | × | |||||||
l | gg.Bar | × | × | ||||||
l | gg.VarWidth | × | |||||||
l | gg.OutShape | × | |||||||
l | gg.JitWidth | × | |||||||
l | gg.JitSize | × | |||||||
l | gg.Range | × | |||||||
ggplot2 | gg.plty | × | |||||||
l | gg.plwd | × | |||||||
l | gg.cglwd | × | |||||||
l | gg.cglcol | × | |||||||
l | gg.fontsize.title | × | |||||||
l | gg.fontsize.labels | × | |||||||
l | gg.fontcolor.labels | × | |||||||
l | gg.border.lwds | × | |||||||
l | gg.border.col | × | |||||||
l | gg.lowerbound.cex.labels | × | |||||||
l | gg.force.print.labels | × | |||||||
— | gg.overlap.labels | × | |||||||
» | hc.Tema | × | × | × | × | × | × | × | |
l | hc.Credits | × | × | × | × | × | × | × | |
highcharter | hc.BoxInfo | × | |||||||
l | hc.Slider | × | |||||||
» | hc.borderRadius | × | |||||||
• | ply.Credits | × | × | × | × | × | × | × | |
° | ply.Legend | × | × | ||||||
° | ply.LegendPosition | × | × | × | × | ||||
plotly | ply.Interaction | × | × | ||||||
° | ply.Relleno | × | |||||||
° | ply.Opacidad | × | × | ||||||
• | ply.LegendTitle | × | |||||||
dygraphs | dyg.LegendWidth | × | |||||||
» | dyg.Resaltar | × | |||||||
— | e.Tema | × | |||||||
l | e.Credits | × | |||||||
echarts4r | e.Forma | × | |||||||
l | e.LegType | × | |||||||
— | e.LegLoc | × | |||||||
Note
A continuación, se consolida en una tabla amigable el listado, uso y disposición
de todas las opciones para el parámetro estilo
, dependiendo del tipo de gráfico
(dinámico o estático) y la librería usada (en el caso de que sea dinámico).
PARÁMETRO | VALOR | PARÁMETRO | VALOR | PARÁMETRO |
* | • | gg.Tema | ||
* | • | gg.Legend | ||
TRUE | • | gg.Linea | ||
* | • | gg.Punto | ||
* | • | gg.Texto | ||
* | • | gg.Repel | ||
O | ~ | highcharter | hc.Tema | |
estatico | O | _ | ¦ | hc.BoxInfo |
O | _ | ¦ | hc.Slider | |
O | _ | ¦ | hc.Credits | |
FALSE | libreria | plotly | ply.LegendPosition | |
O | _ | ° | ply.Credits | |
O | _ | ° | ply.Interaction | |
O | _ | dygraphs | dyg.LegendWidth | |
O | ~ | L | dyg.Resaltar | |
Examples
# library("tibble"); library("dplyr")
set.seed(42)
Blood <- tibble(
Year = rep(2000:2001, each = 100),
Quarter = sample(c("I", "II", "III", "IV"), size = 200, replace = TRUE),
Week = sample(c("1rt", "2nd", "3rd"), size = 200, replace = TRUE),
Group = sample(
c("O", "A", "B", "AB"), size = 200, prob = c(.5, .3, .16, .4), replace = TRUE
),
RH = sample(c("+", "-"), size = 200, replace = TRUE),
Prevalence = round(runif(200)*100)
)
Plot.Series(
datos = Blood,
tiempo = vars(Year, Quarter, Week),
valores = Prevalence,
categoria = RH,
labelX = ""
)
Plot.Series(
datos = Blood,
tiempo = vars(Year, Quarter),
valores = Prevalence,
categoria = Group,
libreria = "plotly"
)
# ---------------------------------------------------------------------------
misColores <- c(
"#29ABE2", # AZUL CLARO | Amazonia
"#8CC63F", # VERDE | Bogota
"#CC241D", # ROJO | Caribe
"#0071BC", # AZUL VIVO | Manizales
"#F15A24", # NARANJA | Medellin
"#FBB03B", # AMARILLO | Orinoquia
"#93278F", # MORADO | Palmira
"#8A381A" # GRIS | Tumaco
)
Msj <- "Distribuci\u00f3n de estudiantes graduados (desde el 2009-I al 2021-I) por sede."
Txt <- "EVOLUCI\u00d3N DEL N\u00daMERO DE GRADUADOS POR SEDE"
Plot.Series(
datos = ejConsolidadoGrad,
categoria = "SEDE_NOMBRE_ADM",
freqRelativa = TRUE,
ylim = c(0, 75),
colores = misColores,
titulo = Txt,
labelY = "Frecuencia Relativa<br>(% de graduados)",
libreria = "highcharter",
estilo = list(LegendTitle = "SEDE:", hc.Tema = 10, hc.Slider = TRUE, hc.Credits = Msj)
)
# ---------------------------------------------------------------------------
Plot.Series(
datos = ejConsolidadoGrad,
categoria = "SEDE_NOMBRE_ADM",
invertir = TRUE,
colores = misColores,
titulo = Txt,
labelY = "N\u00famero de Graduados",
libreria = "plotly",
estilo = list(
LegendTitle = "SEDE:", ply.Interaction = "closest",
ply.LegendPosition = list(x = 0.16, y = -0.25, orientation = "h"),
ply.Credits = list(x = 0.5, y = 0.1, text = Msj)
)
)
# ---------------------------------------------------------------------------
Plot.Series(
datos = ejConsolidadoGrad,
categoria = "SEDE_NOMBRE_ADM",
colores = misColores,
titulo = Txt,
labelY = "N\u00famero de Graduados (k: miles)",
libreria = "dygraphs",
estilo = list(dyg.LegendWidth = 650, dyg.Resaltar = TRUE)
)
# ---------------------------------------------------------------------------
# Agrupando para eliminar el semestre
# library("dplyr")
df <- ejConsolidadoGrad |> group_by(Variable, YEAR, Clase) |>
summarise(Total = sum(Total, na.rm = TRUE), .groups = "drop")
Msj <- "Comportamiento anual, considerando ambos semestres (exceptuando el caso del 2021)."
Plot.Series(
datos = df,
categoria = "SEXO",
ylim = c(1000, 6000),
colores = c("#3360FF", "#F30081"),
titulo = "EVOLUCI\u00d3N DEL N\u00daMERO DE GRADUADOS POR SEXO",
labelX = "A\u00f1o",
labelY = "N\u00famero de Graduados",
libreria = "highcharter",
estilo = list(hc.Tema = 1, hc.Credits = Msj)
)
# ---------------------------------------------------------------------------
# Ejemplo usando el caso estático (ggplot2)
# library("magick"); library("cowplot")
txtA <- "EVOLUCI\u00d3N DEL N.\u00ba DE GRADUADOS \u00d7 SEDE"
txtB <- "\nComportamiento anual (exceptuando el caso del 2021)."
fig1 <- Plot.Series(
datos = ejConsolidadoGrad,
categoria = "SEDE_NOMBRE_ADM",
freqRelativa = FALSE,
invertir = FALSE,
ylim = c(100, 2000),
colores = misColores,
titulo = txtA,
labelY = "N\u00famero de Graduados",
estatico = TRUE,
estilo = list(
LegendTitle = "SEDE:", gg.Tema = 8,
gg.Legend = list(legend.position = "bottom", legend.direction = "horizontal"),
gg.Linea = list(linetype = 2, size = 0.1, arrow = grid::arrow()),
gg.Punto = list(alpha = 0.2, shape = 21, size = 2, stroke = 5),
gg.Texto = list(
subtitle = txtB, caption = "\t\t Informaci\u00f3n Disponible desde 2009-1", tag = "\u00ae"
)
)
)
# A continuación, se detalla el caso en el que quiera adicionar un logo a 'fig1'
# library("ggplot2"); library("magick"); require("cowplot")
URL <- "https://upload.wikimedia.org/wikipedia/commons/1/1e/UNAL_Logosimbolo.svg"
LogoUN <- magick::image_read_svg(URL)
ggdraw() +
draw_image(LogoUN, scale = 0.15, x = 0.15, hjust = 1, halign = 1, valign = 0) +
draw_plot(fig1 + theme(legend.background = element_blank(),
panel.background = element_blank(),
plot.background = element_blank()
)
)
# ---------------------------------------------------------------------------
# A continuación, se detalla el caso en el que quiera anotaciones textuales repulsivas
# * (1) Espacio vacío que se debe respetar alrededor de la caja delimitadora
# * (2) Espacio vacío que se debe respetar alrededor de cada punto
# * (3) Entre más bajo más flechas, entre más distancia menos flechas
Plot.Series(
datos = ejConsolidadoGrad,
categoria = "SEDE_NOMBRE_ADM",
freqRelativa = FALSE,
invertir = FALSE,
ylim = c(100, 2000),
colores = misColores,
titulo = "EVOLUCI\u00d3N DEL N.\u00ba DE GRADUADOS \u00d7 SEDE",
labelY = "N\u00famero de Graduados",
estatico = TRUE,
estilo = list(
gg.Tema = 1,
gg.Repel = list(
direction = "both", seed = 42, nudge_y = 0.25,
arrow = arrow(length = unit(0.01, "npc")), segment.colour = "#4C716B",
box.padding = 0.5 , # (1)
point.padding = 0.25, # (2)
min.segment.length = 0.45 # (3)
)
)
)