# autor -------------------------------------------------------------------
# carlos.perez7@udea.edu.co
# carlos.perezoft@gmail.com
# 25/10/2019 2:42:08 p. m.
#
#
# INICIO SERIES DE HIPERCARTA <-- DETALLE CARTA DE CONTROL:
#
output$hipercartaEstacionesPlot <- renderDygraph({
#
# Seleccion de la hipercarta de referencia segun la estacion:
dsBase <- switch(input$hiperEstacionFiltroEstacion,
"1_SAN_MIGUEL" = hcSanMiguelEstacionData,
"3_ANCON_SUR" = hcAnconSurEstacionData,
"8_AULA_AMBIENTAL" = hcSanMiguelEstacionData # Se usan los datos de San Miguel, pues NO se tiene del Aula Ambiental.
)
#
req(dsBase)
#
dsMesEstacion <- medicionEstacionData
req(dsMesEstacion)
#
if(!is.null(input$hcEstacionesMes)) {
dsMesEstacion <- dsMesEstacion %>% filter(MES %in% input$hcEstacionesMes)
}
#
dsMesEstacion <- dsMesEstacion %>% filter(ESTACION == input$hiperEstacionFiltroEstacion)
#
dsMesEstacion <- dsMesEstacion %>% filter(DIA_MES == input$hiperEstacionDiaMes)
#
shiny::validate(
shiny::need(nrow(dsMesEstacion) > 0, # Este check valida la condicion de forma "afirmativa"..
"No se tienen mediciones disponibles para los filtros usados.")
)
#
hiperSel <- input$hipercartaEstacionesSel
hiperParams <- switch(hiperSel,
"MEDIA_Condu" = c("id_t", "LI_Condu", "MEDIA_Condu", "LS_Condu"),
"MEDIA_ph" = c("id_t", "LI_ph", "MEDIA_ph", "LS_ph"),
"MEDIA_od" = c("id_t", "LI_od", "MEDIA_od", "LS_od"),
"MEDIA_turb" = c("id_t", "LI_turb", "MEDIA_turb", "LS_turb"),
"MEDIA_pot_redox" = c("id_t", "LI_pot_redox", "MEDIA_pot_redox", "LS_pot_redox"),
"MEDIA_tempera" = c("id_t", "LI_tempera", "MEDIA_tempera", "LS_tempera")
)
# Se procede a realizar la creacion de un data.frame que contenga las 144
# filas de la hipercarta base, pero en las filas donde no hayan datos
# en la bitacora del mes, se deja el valor NA. Lo cual permite
# que la serie en dyGraphs se presente por segmentos.
dataParamSerie <- dsMesEstacion[c("id_t", input$hipercartaEstacionesSel)]
names(dataParamSerie) <- c("id_t", "parametro_estacion")
# data.frame a ser usado como anexo al dataSerie para la hipercarta completa:
dataSerieToBind <- data.frame("parametro_estacion"=1:nrow(dsBase))
dataSerieToBind$parametro_estacion <- NA # por defecto sin valor
#
for(k in 1:nrow(dataParamSerie)) {
# En el DF dataSerieToBind se asigna el valor del dataParamSerie("parametro_estacion"->k,2, fila k, columna 2)
# usando como indice el dataParamSerie("id_t"->k,1, fila k, columna 1)). Aqui en particular se lee el valor
# puntual usando el operador [[n]], pues sin ello R retorna un elemento tipo list.
dataSerieToBind$parametro_estacion[dataParamSerie[[k,1]]] <- dataParamSerie[[k,2]]
}
# Obtencion del Data Frame de la serie usando manejo de columnas, funciona OK:
# UTIL! cbind: combina dos data.frame con el mismo numero de filas.
# IMPORTANTE: Las columnas de los data.frame a presentar en el "dyGraph" deben ser tipo "numeric".
dataSerie <- cbind(dsBase[hiperParams], dataSerieToBind)
#
if(input$hcEstacionesTipoCarta == "INT_CONF") {
# id_t: Debe usarse ya que el "dyGraph" la toma como ID de cada fila a graficar, y cada columna se toma como una serie:
colnames(dataSerie) <- c("id_t", "lwr", "fit", "upr", "parametro_estacion")
}
#
selected_label <- media_labels %>% filter(variable == hiperSel) %>% select("desc")
#
gSerie <- dygraph(dataSerie, main=sprintf("%s",selected_label),
xlab=paste("t por Hipercarta"), ylab=paste("Intervalo para:", selected_label)) %>%
dyRangeSelector() %>% dyHighlight(highlightSeriesOpts = list(strokeWidth = 2)) %>%
dyOptions(drawGrid=input$hcEstacionesShowgridCheck, drawPoints=TRUE, pointSize=2, pointShape="dot") %>%
dyLegend(width=700)
#
if(input$hcEstacionesTipoCarta == "INT_CONF") {
# UTIL! la funcion sub(..) reemplaza por vacio ("") el resto del string luego del primer espacio de izq. a der.
# --> Asi se obtiene la primera palabra del string.
param_name_label <- sub( "\\s.*", "", selected_label)
#
# IMPORTANTE: dyGraph permirte una serie de un elemento (1-col) o intervalo (3-cols).
# AquĆ se configuran dos dySeries excelentes:
# a. La serie del parametro_estacion en interv. de conf. de la hipercarta (3-cols). Inicialmente fue solo: parametro_estacion
# b. La serie de la hipercarta base (3-cols). Con las dos series se ve un contraste muy bueno.
gSerie <- gSerie %>% dySeries(c("lwr", "parametro_estacion", "upr"), label=paste("Par\u00E1metro", param_name_label)) %>%
dySeries(c("lwr", "fit", "upr"), label=paste("Hipercarta", param_name_label))
}
if(!input$hcEstacionesShowgridCheck) {
gSerie <- gSerie %>% dyCrosshair()
}
#
return(gSerie)
})
#
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.