#---------------------------------------------------------------#
## los datos                                                    ##
rm(list=ls())

library(ggplot2) 
library(scales)


source("f_longley.R") # Función de acceso al conjunto de datos de Longley
df1 <- f_longley(verbose =FALSE) # silenciar la carga de datos
glimpse(df1) # echemos un vistazo

## resumen de datos 2 a 2
plot(df1[,1:4],
        col = ((df1$an <= 1950)+1), # cambios de color de puntos en 1950
        pch = ((df1$an <= 1950)+3) # cambios en la forma del punto en 1950
) # +1 y +3 para cambiar
# colores y formas                                 
# cuestion de feeling ...

#---------------------------------------------------------------#
                                 # un dataset ficticio
df2   <- read.csv("datatest1.csv", 
                 sep=";", 
                 dec=",", 
                 na.strings=c(".", "NA", "", "?"), 
                 strip.white=TRUE, 
                 encoding="UTF-8")

df2$class=as.factor(df2$class) # la transformación está bien
# valores discretos
# en factores
str(df2)

## vista de algunas variables 2 a 2
plot(df2[,c(1,2,3)])

## vista de algunas variables 2 a 2
plot(df2[,c(1,2,13)], # selección de variables
     col = as.numeric(df2$clase)+1,# color pts funct(clase)
     pch = as.numeric(df2$clase)+2 # form pts funct(clase)
)

## vista de algunas variables 2 a 2
plot(df2[,c(1,2,3,7,11,13)], # selección de variables
     col = as.numeric(df2$clase)+1,# color pts funct(clase)
     pch = as.numeric(df2$clase)+2 # form pts funct(clase)
)


#---------------------------------------------------------------#
## trabajar con la gramática ggplot2 ##

## un gráfico simple v11 versus v7 con regresión ##

p <- ggplot(data=df2) # eligir su conjunto de datos
a1<- aes(x=v7,y=v11) # lista de variables y parámetros
# creación del plot p1
p1<- p+ # al menos un parámetro de geometría:
  geom_point(a1, # queremos puntos
             col = "blue", # azules
             pch = 5) + # diamantes
  geom_smooth(a1, # y una regresión
              col = "red", # color rojo
              size = 1, # grosor de línea
              linetype = 3) # línea en puntos pequeños

p1<- p1 + theme(text=element_text(size=16)) # tamaño de caracteres
p1 # visualización


#---------------------------------------------------------------#
## un histograma con varias clases                       ##

p <- ggplot(data=df2) # elige tu conjunto de datos
a1<- aes(x=v7,fill=class) # lista de variables y parámetros
# una densidad por clase

# creación del plot p1
p1<- p+ # al menos un parámetro geográfico
  geom_histogram(a1, # muestra el histograma
                 binwidth =0.125, # ancho de las bandas
                 alfa = 1/2) # transparencia del histograma

p1<- p1 + theme(text=element_text(size=16)) # tamaño de caracteres
p1 <- p1 + scale_fill_grey() # para edición en blanco y negro
p1 # visualización

#------------------------------------------------- --------------#
## un histograma con varias clases una junto a la otra ##

p <- ggplot(data=df2) # elige tu conjunto de datos
a1<- aes(x=v2,fill=class) # lista de variables y parámetros

# creación del plot p1
p1<- p+ # al menos un parámetro geográfico
  geom_histogram(a1, # muestra el histograma
                 binwidth =0.25, # ancho de las bandas
                 position='dodge',# lado a lado
                 alfa = 4/5) # transparencia del histograma


p1<- p1 + theme(text=element_text(size=16)) # tamaño de caracteres
p1 <- p1 + scale_fill_grey() # para edición en blanco y negro
p1 # visualización
#---------------------------------------------------------------#
## un histograma con density                                 ##

p <- ggplot(data=df2) # eligIr su conjunto de datos
a1<- aes(x=v2,..density..) # lista de variables y parámetros hist
a2<- aes(x=v2) # lista de variables y parámetro rug

# creación del plot p1
p1<- p+ # al menos un parámetro geográfico
  geom_histogram(a1,
                    size = 1,
                    col= "steelblue", 
                    alpha = 1/3) +   
     geom_density(a1,
                  size = 1,
                  col= "steelblue", 
                  alpha = 1/3) +
     geom_rug(a2)

p1<- p1 + theme(text=element_text(size=16)) # tamaño carácter
p1  

#---------------------------------------------------------------#
## un histograma "stacked" (empilage) ->muestra las proporciones##
## entre clases para los diferentes valores                  ##

p <- ggplot(data=df2) # eligr su conjunto de datos
a1<- aes(x=v2,fill=class) # lista de variables y parámetros

# creación del plot p1
p1<- p+ # al menos un parámetro geográfico
  geom_histogram(a1, # muestra el histograma
                 binwidth =0.085, # ancho de las bandas
                 position='fill',# sin superposición de barras
                 alfa = 4/7) # transparencia del histograma

p1<- p1 + theme(text=element_text(size=16)) # tamaño de caracteres
p1 <- p1 + scale_fill_grey() # para edición en blanco y negro  
p1                                          # visualización

#---------------------------------------------------------------#
## facet : varias curvas en función de la clase             ##

p <- ggplot(data=df2)         # elegir su dataset
a1<- aes(x=v1)                # lista de variables y parámetros

                              # creación del plot p1
p1<- p+                       # al menos un argumento de geo
  geom_histogram(a1,          # muestra histogramme
                 binwidth =0.1,  # largeur des bandes
                 position='dodge',
                 col = 'blue',
                 alpha = 1/2) # transparence de l'histrogramme 

p1<- p1 + facet_wrap(~clase)
p1<- p1 + theme(text=element_text(size=16)) # tamaño de caracteres
p1                                          # visualización


#---------------------------------------------------------------#
## un gráfo con density por clase                           ##

p <- ggplot(data=df2)         # elegir su dataset
a1<- aes(x=v7, col = clase, 
         linetype = clase)   # lista de variables y parámetros
                              # una densidad por clase

                              # creación del plot p1
p1<- p+                       # al menos un argumento de geo
     geom_density(a1,         # muestra density
                  size = 1,   # grosor de la línea
                  ) 
p1<- p1 + theme(text=element_text(size=16)) # tamaño de caracteres

p1                                          # visualización

#---------------------------------------------------------------#
## faceta y escala log  + un título                            ##

p <- ggplot(data=df2) # elegir su dataset
a1<- aes(x=v7,y=v11)  # lista de variables y parámetros
                      # creación del plot p1
p1<- p+               # al menos un argumento de geometrie:
  geom_point(a1, # queremos puntos
             pch = 5, # diamantes
             col = "blue" ) + # azules
  geom_smooth(a1, # y una regresión
              col = "red", # color rojo
              size = 0.5 , # ancho de la línea
              linetype = 1) + # línea
  scale_y_log10()+ # escala logarítmica para y
  labs(title='v11 basado en v7 "faceta"') # título
p1<- p1 + facet_wrap(~clase)

p1<- p1 + theme(text=element_text(size=16))  # tamaño de caracteres
print(p1)                      # visualización con print (idem)

#---------------------------------------------------------------#
## diagrama camemberg entre las 4 clases                     ##

set.seed(1) # reproducible aleatorio
dfx<-df2[sample(nrow(df2),40),] # extraer muestra aleatoria

p <- ggplot(data=dfx) # elegir su conjunto de datos
a1<- aes(x = factor(""), # ¡dummy attention ficticia!
         fill = class) # lista de variables y parámetros

# creación del plot p1
p1<- p+
  geom_bar(a1,
           alfa = 2/3) + #transparencia
  coord_polar(theta = "y") + # circular
  scale_x_discrete("") # pista
p1<- p1 + theme(text=element_text(size=16)) # tamaño de caracteres
p1                                          # visualización

#---------------------------------------------------------------#
## o para ver mejor las proporciones en el camemberg        ## 

p <- ggplot(data=dfx)        # elegir su dataset
a1<- aes(x = clase, 
         fill = clase)      # lista de variables y parámetros
p1<- p+ geom_bar(a1, 
                 alpha = 1/2)+ 
        coord_polar() +      # circular
        theme_bw()           # otro theme visual para ver mejor 

p1<- p1 + theme(text=element_text(size=16)) # tamaño de caracteres
p1                                          # visualización


#---------------------------------------------------------------#
## proporciones entre 2 tipos de clase                         ##

library("GGally")                         # complemento a ggplot2
#                           # creación nuevo dataframe
set.seed(2) # reproducible aleatorio
# muestra de 40 enteros tomados de una secuencia de 100
# pasando de 0 a 6 (vía módulo %/% en una secuencia)
type <- sample(seq(from = 1, by = 3, len = 100)%% 7,40)
dfy  <- data.frame(dfx,type) # agregar columna
dfy$type=as.factor(dfy$type) # columna de factores
p1 <- ggally_ratio(dfy[,c("type","clase")])
p1 <- p1 + ggplot2::coord_equal()

p1<- p1 + theme(panel.background =          # es más bonito
                  element_rect(colour = "pink"))

p1<- p1 + theme(text=element_text(size=16)) # tamaño de caracteres
p1                                          # visualización

#---------------------------------------------------------------#
## el diagrama por pares admite factores y valores numéricos ##
## mostrar densidades y m-boxes ##

library("GGally") # complemento de ggplot2
p1 <- ggpairs(dfy[,c(1,3,11,13,14)], # elección de variables
              alfa = 1/2) # transparencia

p1<- p1 + theme(panel.background = # es más bonito
                  element_rect(colour = "pink"))

p1<- p1 + theme(text=element_text(size=16)) # tamaño de caracteres
p1                                          # visualización

