Muestreo y Mediciones Ambientales

Institución: UCE — FIGEMPA
Periodo: Cuarto Semestre 2026-2027
Autor: Grupo 1

Integrantes: Paqueco Samanta, Criollo Jhonny

Basado en apuntes de F. Acevedo

1.- CARGA DE LIBRERÍAS

Cargar librerías necesarias

library(readxl)
library(ggplot2)
library(knitr)
library(dplyr)
library(plotly)

Confirmar directorio de trabajo actual

getwd()
## [1] "C:/Users/CESAR/Documents"
datos_originales <- read_excel("muestras_datos.xlsx")
# Crear la columna con las descripciones detalladas de cada variable/muestra
datos_procesados <- read_excel("muestras_datos.xlsx") %>%
  mutate(
    Descripcion = case_when(
      Muestras == "AF"   ~ "Agua fría",
      Muestras == "AC"   ~ "Agua caliente",
      Muestras == "AFS"  ~ "Agua fría con sal",
      Muestras == "ACS"  ~ "Agua caliente con sal",
      Muestras == "ATA"  ~ "Agua temperatura ambiente",
      Muestras == "ATAS" ~ "Agua temperatura ambiente con sal",
      TRUE ~ Muestras
    ),
    Color_Punto = case_when(
      Muestras == "AF"   ~ "blue",
      Muestras == "AC"   ~ "red",
      Muestras == "AFS"  ~ "darkturquoise",
      Muestras == "ACS"  ~ "orange",
      Muestras == "ATA"  ~ "purple",
      Muestras == "ATAS" ~ "saddlebrown",
      TRUE ~ "black"
    )
  )
# Mostrar la tabla formateada en tu reporte HTML
kable(datos_procesados, caption = "Mediciones ambientales con descripción de muestras")
Mediciones ambientales con descripción de muestras
Muestras Densidad_P_g_ml Temperatura_C Conductividad_uS_cm Descripcion Color_Punto
AF 1.0234 5.0 228.20 Agua fría blue
AC 0.9910 47.0 271.60 Agua caliente red
AFS 0.9880 7.8 25.59 Agua fría con sal darkturquoise
ACS 1.0070 46.1 27.98 Agua caliente con sal orange
AF 1.0230 5.0 228.20 Agua fría blue
ACS 0.9730 50.0 27.98 Agua caliente con sal orange
ATA 0.9800 18.3 249.00 Agua temperatura ambiente purple
ATAS 0.9810 17.3 22.46 Agua temperatura ambiente con sal saddlebrown
plot(
  datos_procesados$Temperatura_C, 
  datos_procesados$Densidad_P_g_ml,
  type = "p",
  pch = 16,                        # Puntos sólidos
  cex = 1.5,                       # Tamaño del punto
  col = datos_procesados$Color_Punto, # Colores fijos definidos por fila/muestra
  main = "Gráfico: Densidad vs Temperatura (Colores por Muestra)",
  xlab = "Temperatura (°C)",
  ylab = "Densidad (g/ml)"
)

# 2. Agregar etiquetas de texto a cada punto (opcional para identificar rápido)
text(
  datos_procesados$Temperatura_C, 
  datos_procesados$Densidad_P_g_ml, 
  labels = datos_procesados$Muestras, 
  pos = 3, 
  cex = 0.8
)

# 3. Leyenda explicativa de los colores
legend(
  "topright", 
  legend = c("Agua fría (AF)", "Agua caliente (AC)", "Fría con sal (AFS)", 
             "Caliente con sal (ACS)", "Ambiente (ATA)", "Ambiente con sal (ATAS)"), 
  col = c("blue", "red", "darkturquoise", "orange", "purple", "saddlebrown"), 
  pch = 16, 
  cex = 0.8
)

# 1. Ajustar los márgenes de la ventana (el cuarto número, 6, da espacio abajo para la leyenda)
par(mar = c(7, 4, 4, 2) + 0.1)

# 2. Graficar Densidad vs Conductividad
plot(
  datos_procesados$Conductividad_uS_cm, 
  datos_procesados$Densidad_P_g_ml,
  type = "p",
  pch = 16,                          
  cex = 1.5,                         
  col = datos_procesados$Color_Punto,
  main = "Gráfico: Densidad vs Conductividad Eléctrica\nAnálisis de Muestras Ambientales - UCE FIGEMPA",
  xlab = "Conductividad (µS/cm)",
  ylab = "Densidad (g/ml)"
)

# 3. Agregar etiquetas de texto a los puntos
text(
  datos_procesados$Conductividad_uS_cm, 
  datos_procesados$Densidad_P_g_ml, 
  labels = datos_procesados$Muestras, 
  pos = 3,                           
  cex = 0.8,
  font = 2                           
)

# 4. Colocar la leyenda de manera ordenada en la parte inferior fuera del cuadro
# xpd = TRUE permite dibujar fuera de los límites del cuadro principal
legend(
  x = "bottom",                      
  inset = -0.60,                     # Desplaza la leyenda hacia abajo fuera del eje X
  xpd = TRUE,                        # Permite dibujar en los márgenes exteriores
  legend = c("Agua fría (AF)", "Agua caliente (AC)", "Fría con sal (AFS)", 
             "Caliente con sal (ACS)", "Ambiente (ATA)", "Ambiente con sal (ATAS)"), 
  col = c("blue", "red", "darkturquoise", "orange", "purple", "saddlebrown"), 
  pch = 45, 
  cex = 0.7,
  ncol = 5,                          # Organiza los elementos en 2 columnas para que se vea ordenado
  bty = "n"                          # Sin recuadro
)

# 5. Restaurar los márgenes predeterminados de R por buena práctica
par(mar = c(5, 4, 4, 2) + 0.1)
plot_ly(datos_procesados, 
        x = ~Conductividad_uS_cm, 
        y = ~Temperatura_C, 
        z = ~Densidad_P_g_ml, 
        color = ~Descripcion,
        colors = c("blue", "red", "darkturquoise", "orange", "purple", "saddlebrown"),
        text = ~paste("<b>Muestra:</b>", Muestras, 
                      "<br><b>Descripción:</b>", Descripcion,
                      "<br><b>Conductividad:</b>", Conductividad_uS_cm, "µS/cm",
                      "<br><b>Temperatura:</b>", Temperatura_C, "°C",
                      "<br><b>Densidad:</b>", Densidad_P_g_ml, "g/ml"),
        hoverinfo = 'text',
        type = 'scatter3d', 
        mode = 'markers',                    # <-- Solo 'markers' para limpiar el texto estorbo en el cubo
        marker = list(size = 7, opacity = 0.9)) %>%
  layout(
    title = list(
      text = "<b>Relación Tridimensional (3D)</b><br><sup>Conductividad, Temperatura y Densidad - UCE FIGEMPA</sup>", 
      font = list(size = 14)
    ),
    scene = list(
      xaxis = list(title = '<b>Conductividad (µS/cm)</b>'),
      yaxis = list(title = '<b>Temperatura (°C)</b>'),
      zaxis = list(title = '<b>Densidad (g/ml)</b>')
    ),
    legend = list(
      title = list(text = '<b>Tipo de Muestra</b>'),
      x = 1.1, y = 0.8
    )
  )