| 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)
)
)
)