3 DIAGRAMA DE PIPER

María Victoria López 1

Sofía Carolina Carrasco 2

3.1 Paquete hydrogeo

Permite realizar el diagrama de Piper (Piper-Hill).

3.2 Instalación

hydrogeo se encuentra disponible en el repositorio CRAN. Para instalar el paquete se utiliza la sentencia install.packages("hydrogeo"). Luego, se debe llamar el paquete en el entorno de trabajo:

library(hydrogeo)

3.3 Cargar los datos en R

Se va a trabajar con dos muestras de agua. Primero se crean objetos que contendrán los valores correspondientes al mismo, como por ejemplo, Muestra que contiene los siguientes valores c(Villavicencio y Glaciar).

Muestra <- c("Villavicencio","Glaciar")
Ca <- c(2.00,2.18)
Mg <- c(0.33,3.73)
Na <- c(0.30,4.78)
K <- c(1.15,0.12)
Cl <- c(1.97,0.72)
SO4 <- c(0.31,2.87)
CO3 <- c(0.32,0.35)
HCO3 <- c(1.30,6.13)

3.4 Creación de data.frame

Se crea una base de datos llamada Aguas con los objetos creados anteriormente utilizando la función data.frame.

Aguas <- data.frame(Muestra,Ca,Mg,Na,K,Cl,SO4,CO3,HCO3)
Aguas
##         Muestra   Ca   Mg   Na    K   Cl  SO4  CO3 HCO3
## 1 Villavicencio 2.00 0.33 0.30 1.15 1.97 0.31 0.32 1.30
## 2       Glaciar 2.18 3.73 4.78 0.12 0.72 2.87 0.35 6.13
str(Aguas)
## 'data.frame':    2 obs. of  9 variables:
##  $ Muestra: chr  "Villavicencio" "Glaciar"
##  $ Ca     : num  2 2.18
##  $ Mg     : num  0.33 3.73
##  $ Na     : num  0.3 4.78
##  $ K      : num  1.15 0.12
##  $ Cl     : num  1.97 0.72
##  $ SO4    : num  0.31 2.87
##  $ CO3    : num  0.32 0.35
##  $ HCO3   : num  1.3 6.13
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.2.3
## Warning: package 'ggplot2' was built under R version 4.2.3
## Warning: package 'tibble' was built under R version 4.2.3
## Warning: package 'tidyr' was built under R version 4.2.3
## Warning: package 'readr' was built under R version 4.2.3
## Warning: package 'purrr' was built under R version 4.2.3
## Warning: package 'dplyr' was built under R version 4.2.3
## Warning: package 'stringr' was built under R version 4.2.3
## Warning: package 'forcats' was built under R version 4.2.3
## Warning: package 'lubridate' was built under R version 4.2.3
## ── Attaching core tidyverse packages ───────────────
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.0     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Aguas %>% 
  mutate(Muestra=as.factor(Muestra))->Aguas
str(Aguas)
## 'data.frame':    2 obs. of  9 variables:
##  $ Muestra: Factor w/ 2 levels "Glaciar","Villavicencio": 2 1
##  $ Ca     : num  2 2.18
##  $ Mg     : num  0.33 3.73
##  $ Na     : num  0.3 4.78
##  $ K      : num  1.15 0.12
##  $ Cl     : num  1.97 0.72
##  $ SO4    : num  0.31 2.87
##  $ CO3    : num  0.32 0.35
##  $ HCO3   : num  1.3 6.13

3.5 ¿Las muestras son fiables?

Sí el error calculado en % es \(<=5\) % las muestras son fiables. Para obtener el error hacemos uso de la library(tidyverse).

library(tidyverse)
Aguas %>% 
  group_by(Muestra) %>% 
  summarise("Total Cationes"=sum(Ca,Mg,Na,K),
            "Total Aniones"=sum(HCO3,CO3,SO4,Cl),
            Error=round(abs((`Total Cationes` - `Total Aniones`)/(`Total Cationes` + `Total Aniones`)*100),2),
            Confiable=if(Error<5){mje="SÍ"}else{mje="NO"})
## # A tibble: 2 × 5
##   Muestra       `Total Cationes` `Total Aniones` Error Confiable
##   <fct>                    <dbl>           <dbl> <dbl> <chr>    
## 1 Glaciar                  10.8             10.1  3.54 SÍ       
## 2 Villavicencio             3.78             3.9  1.56 SÍ

3.6 Funciones

3.6.1 toPercent{Hydrogeo}

La función toPorcent transforma los iones principales en porcentaje del total de iones principales. Trabaja con una list o data.frame con las siguientes columnas: Ca, Mg, Na, K, Cl, SO4, CO3 y HCO3.

library(hydrogeo)
## Warning: package 'hydrogeo' was built under R version 4.2.3
b <- toPercent(Aguas)
b
##         Muestra       Ca        Mg        Na         K       Cl       SO4
## 1 Villavicencio 52.91005  8.730159  7.936508 30.423280 50.51282  7.948718
## 2       Glaciar 20.16651 34.505088 44.218316  1.110083  7.14995 28.500497
##        CO3     HCO3
## 1 8.205128 33.33333
## 2 3.475670 60.87388
#Chequeamos que la suma de los iones sea igual a 100.

library(tidyverse)
c<-b %>% 
  group_by(Muestra) %>% 
  summarise("Suma Total Cationes"=sum(Ca,Mg,Na,K),
            "Suma Total Aniones"=sum(HCO3,CO3,Cl,SO4))
c
## # A tibble: 2 × 3
##   Muestra       `Suma Total Cationes` `Suma Total Aniones`
##   <fct>                         <dbl>                <dbl>
## 1 Glaciar                         100                  100
## 2 Villavicencio                   100                  100
#Función piper{hydrogeo}

#Objeto con la función piper permite crear el Diagrama de Piper

f <- piper(b)
b
##         Muestra       Ca        Mg        Na         K       Cl       SO4
## 1 Villavicencio 52.91005  8.730159  7.936508 30.423280 50.51282  7.948718
## 2       Glaciar 20.16651 34.505088 44.218316  1.110083  7.14995 28.500497
##        CO3     HCO3
## 1 8.205128 33.33333
## 2 3.475670 60.87388
#Rojo:Villavicencio
#Azul:Glaciar
#Cambiar colores (pt.col) y símbolos (pt.pch) para diferenciar las muestras de agua

f@pt.col=c("red","blue")
f@pt.pch=c(20,20)

plot(f,main="Diagrama de Piper",cex=2,cex.lab=1)

## [1] TRUE
McPhillips et al. 2014
McPhillips et al. 2014
Batista Cruz et al. 2022
Batista Cruz et al. 2022

3.6.2 pt.pch

## Trabajar con meq/L

# Transformar mg/L a meq/L

# Creación de objetos

Muestra <- factor(c("Villavicencio","Glaciar"))
Ca <- c(2.00,2.18)
Mg <- c(0.33,3.73)
Na <- c(0.30,4.78)
K <- c(1.15,0.12)
Cl <- c(1.97,0.72)
SO4 <- c(0.31,2.87)
# Aclaración: es NO3 pero se coloca el campo CO3 para trabajar con el paquete hydrogeo
CO3 <- c(0.32,0.35)
HCO3 <- c(1.30,6.13)

# meq/L
data <- data.frame(Ca,Mg,Na,K,Cl,SO4,CO3,HCO3,Muestra)
str(data)
## 'data.frame':    2 obs. of  9 variables:
##  $ Ca     : num  2 2.18
##  $ Mg     : num  0.33 3.73
##  $ Na     : num  0.3 4.78
##  $ K      : num  1.15 0.12
##  $ Cl     : num  1.97 0.72
##  $ SO4    : num  0.31 2.87
##  $ CO3    : num  0.32 0.35
##  $ HCO3   : num  1.3 6.13
##  $ Muestra: Factor w/ 2 levels "Glaciar","Villavicencio": 2 1
# ¿Muestra fiable?
library(tidyverse)
data %>% 
  group_by(Muestra) %>% 
  summarise("Suma de cationes"=num(sum(Ca,Mg,Na,K)),
            "Suma de aniones"=num(sum(Cl,SO4,CO3,HCO3)))->Data
Data %>% 
  group_by(Muestra) %>% 
  summarise(Error=abs(((`Suma de cationes`- `Suma de aniones`)/ 
                         (`Suma de cationes`+ `Suma de aniones`)) *100),
            Confiable=if(Error<5){mje="SÍ"}else{mje="NO"})
## # A tibble: 2 × 3
##   Muestra       Error Confiable
##   <fct>         <num> <chr>    
## 1 Glaciar        3.54 SÍ       
## 2 Villavicencio  1.56 SÍ
library(hydrogeo)
# toPercent{hydrogeo}
toPercent(data)->Porcentaje
Porcentaje
##         Ca        Mg        Na         K       Cl       SO4      CO3     HCO3
## 1 52.91005  8.730159  7.936508 30.423280 50.51282  7.948718 8.205128 33.33333
## 2 20.16651 34.505088 44.218316  1.110083  7.14995 28.500497 3.475670 60.87388
##         Muestra
## 1 Villavicencio
## 2       Glaciar
# Comprobar que la suma de cationes y aniones sea 100
Porcentaje %>% 
  group_by(Muestra) %>% 
  summarise(Suma_cat=Ca+Mg+Na+K,
            Suma_ani=Cl+SO4+CO3+HCO3)
## # A tibble: 2 × 3
##   Muestra       Suma_cat Suma_ani
##   <fct>            <dbl>    <dbl>
## 1 Glaciar            100      100
## 2 Villavicencio      100      100
# Sí trabajas desde R base debes establecer la ruta de acceso
#setwd("C:/Users/hinau/OneDrive/Documentos/VICKIE/Intercátedra/B_L_CURSO")
source("ggplot_Piper.R")
piper <- transform_piper_data(Ca =Porcentaje$Ca,
                              Mg =Porcentaje$Mg,
                              Cl=Porcentaje$Cl,
                              SO4 =Porcentaje$SO4,
                              name=Porcentaje$Muestra)
piper
##     observation         x          y
## 1 Villavicencio  42.72487   7.560579
## 2       Glaciar  62.58094  29.882441
## 3 Villavicencio 174.48718   6.883828
## 4       Glaciar 141.40020  24.682285
## 5 Villavicencio 108.41066 121.332319
## 6       Glaciar 100.48942  95.542203
merge(piper,
      Porcentaje[,],
      by.x = "observation",
      by.y = "Muestra")-> grafico
grafico
##     observation         x          y       Ca        Mg        Na         K
## 1       Glaciar  62.58094  29.882441 20.16651 34.505088 44.218316  1.110083
## 2       Glaciar 141.40020  24.682285 20.16651 34.505088 44.218316  1.110083
## 3       Glaciar 100.48942  95.542203 20.16651 34.505088 44.218316  1.110083
## 4 Villavicencio  42.72487   7.560579 52.91005  8.730159  7.936508 30.423280
## 5 Villavicencio 174.48718   6.883828 52.91005  8.730159  7.936508 30.423280
## 6 Villavicencio 108.41066 121.332319 52.91005  8.730159  7.936508 30.423280
##         Cl       SO4      CO3     HCO3
## 1  7.14995 28.500497 3.475670 60.87388
## 2  7.14995 28.500497 3.475670 60.87388
## 3  7.14995 28.500497 3.475670 60.87388
## 4 50.51282  7.948718 8.205128 33.33333
## 5 50.51282  7.948718 8.205128 33.33333
## 6 50.51282  7.948718 8.205128 33.33333
#DIAGRAMA
ggplot_piper()
## Warning: Using `size` aesthetic for lines was deprecated in
## ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see
## where this warning was generated.

ggplot_piper()+
  geom_point(data = grafico, mapping = aes(x=x,y=y))

ggplot_piper() + 
  geom_point(aes(x,y, colour=observation), 
             size=4, data=grafico)+
  labs(colour="Muestra",
       title = "Diagrama de Piper")