# El objetivo de la presente actividad es practicar las funciones
# utilizadas en el software estadístico R para la graficación de 
# variables en varias dimensiones, las cuales fueron analizadas y
# discutidas en el segundo parcial del curso.

# METODOLOGIA
# I. Realizar un análisis básico de las bases de datos requeridas 
# para realizar los ejercicios.
# II. Discernir sobre las características de los gráficos que se 
# deben realizar para la obtención de la visualización indicada.
# III. Desarrollar el código necesario para resolver los ejercicios
# indicados, utilizando las funciones analizadas y aplicadas en clase.
###Ejercicio #1
#Realizar el siguiente gráfico utilizando la base de datos mtcars 
# del software estadístico R, que contiene las características de 32
# marcas de automóvil modelos 1973 y 1974. Observe el formato de la
# gráfica (partición, fondo, colores, tipo de letra, tipo de líneas, 
# tipos de puntos, valores en los ejes, etiquetas, etc.).

#Debe identificar la paleta de colores que se está utilizando en el
# gráfico de Rendimiento y en el gráfico de dispersión de Rendimiento 
# VS Potencia. El fondo del gráfico es color negro.

#NOTA: En el gráfico de dispersión de Rendimiento VS Potencia, 
# el * corresponde al centroide de ambas variables (El punto de
# intersección de las medianas se denomina centroide) y las líneas 
# blancas punteadas corresponde a las medianas de las variables. 
# Consulte la ayuda de la base de datos mtcars para elegir la 
# columna correcta de la tabla, que corresponde a cada variable deseada.
summary(mtcars)
##       mpg             cyl             disp             hp       
##  Min.   :10.40   Min.   :4.000   Min.   : 71.1   Min.   : 52.0  
##  1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8   1st Qu.: 96.5  
##  Median :19.20   Median :6.000   Median :196.3   Median :123.0  
##  Mean   :20.09   Mean   :6.188   Mean   :230.7   Mean   :146.7  
##  3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0   3rd Qu.:180.0  
##  Max.   :33.90   Max.   :8.000   Max.   :472.0   Max.   :335.0  
##       drat             wt             qsec             vs        
##  Min.   :2.760   Min.   :1.513   Min.   :14.50   Min.   :0.0000  
##  1st Qu.:3.080   1st Qu.:2.581   1st Qu.:16.89   1st Qu.:0.0000  
##  Median :3.695   Median :3.325   Median :17.71   Median :0.0000  
##  Mean   :3.597   Mean   :3.217   Mean   :17.85   Mean   :0.4375  
##  3rd Qu.:3.920   3rd Qu.:3.610   3rd Qu.:18.90   3rd Qu.:1.0000  
##  Max.   :4.930   Max.   :5.424   Max.   :22.90   Max.   :1.0000  
##        am              gear            carb      
##  Min.   :0.0000   Min.   :3.000   Min.   :1.000  
##  1st Qu.:0.0000   1st Qu.:3.000   1st Qu.:2.000  
##  Median :0.0000   Median :4.000   Median :2.000  
##  Mean   :0.4062   Mean   :3.688   Mean   :2.812  
##  3rd Qu.:1.0000   3rd Qu.:4.000   3rd Qu.:4.000  
##  Max.   :1.0000   Max.   :5.000   Max.   :8.000
######### Matriz de arreglo en pantalla. #######
M=matrix(c(1,2,1,3),nrow=2,ncol=2)
M
##      [,1] [,2]
## [1,]    1    1
## [2,]    2    3
layout(M)
layout.show(n=3)

par(bty="n", bg = "black")

########### RENDIMIENTO ###############
marcas=rownames(mtcars)
marcas
##  [1] "Mazda RX4"           "Mazda RX4 Wag"       "Datsun 710"         
##  [4] "Hornet 4 Drive"      "Hornet Sportabout"   "Valiant"            
##  [7] "Duster 360"          "Merc 240D"           "Merc 230"           
## [10] "Merc 280"            "Merc 280C"           "Merc 450SE"         
## [13] "Merc 450SL"          "Merc 450SLC"         "Cadillac Fleetwood" 
## [16] "Lincoln Continental" "Chrysler Imperial"   "Fiat 128"           
## [19] "Honda Civic"         "Toyota Corolla"      "Toyota Corona"      
## [22] "Dodge Challenger"    "AMC Javelin"         "Camaro Z28"         
## [25] "Pontiac Firebird"    "Fiat X1-9"           "Porsche 914-2"      
## [28] "Lotus Europa"        "Ford Pantera L"      "Ferrari Dino"       
## [31] "Maserati Bora"       "Volvo 142E"
plot(mtcars$mpg, 
     type="h", 
     main="Rendimiento", 
     col.main="cyan",
     xlab="", 
     ylab="", 
     col=rainbow(32), 
     lwd=8, xlim=c(0,32), 
     ylim=c(0,35), 
     las=2, 
     xaxt="n", 
     yaxp=c(0,35,7),) 
axis(side=1,
     at=1:32, 
     cex.lab=0.3,
     labels=marcas, 
     col.axis="white", 
     font=1, 
     lwd=1,
     las=2 ,
     xaxp=c(0,32,32)) 
axis(side=2,
     at=0:35, 
     col.axis="white", 
     font=0.5, 
     lwd=0.5,
     las=2)
### POTENCIA VS RENDIMIENTO ################
mmpg=median(mtcars$mpg)
mhp=median(mtcars$hp)
par( bg = "black")
plot(x=mtcars$mpg, 
     y=mtcars$hp, 
     xlim=c(0,40), 
     ylim=c(0,350),
     xlab="Rendimiento (mpg)", 
     ylab="Potencia (HP)",
     type="p", 
     pch=8,
     lwd=3, 
     col=rainbow(6,rev = TRUE),
     xaxp=c(0,40,8), 
     yaxp=c(0,350,7), 
     las=1, 
     col.axis="purple", 
     col.lab="green", 
     font.lab=4,
     fg = "purple") 
points(x=mmpg,
     y=mhp,
     #lty = 2,        
     lwd = 3,
     pch=11,
     col="red")
abline(h=123,
     v=19.2,
     lty = "dotted",        
     lwd = 3,
     col="ivory")

#### CILINDROS VS RENDIMIENTO ###############
par(bg = "black")
grupo=ifelse(mtcars$cyl ==4 , 1, 
             ifelse(mtcars$cyl== 6, 2,
                    3))
Mexico=colorRampPalette(colors=
                          c("forestgreen","white", "red")) #### hacer un filtro
#https://r-coder.com/plot-en-r/#Colorear_segun_grupo
grupo <- ifelse(mtcars$cyl == 4 , "red", 
                ifelse(mtcars$cyl== 6 , "white", "forestgreen"))
plot(x=mtcars$mpg,
     y=mtcars$cyl, 
     xlim=c(0,40), 
     ylim=c(0,8),
     xlab="Rendimiento (mpg)", 
     ylab="Cilindros",
     type="p", pch="x",lwd=5, 
     col.axis="cyan", 
     col.lab="yellow",
     font.lab=2, col=grupo,fg = "cyan",xaxp=c(0,40,20), yaxp=c(4,8,2), las=1) #col=Mexico(n=3)

### Ejercicio 2
# Realizar el siguiente gráfico utilizando las bases de datos ldeaths, fdeaths y mdeaths (decesos mensuales causados por bronquitis, enfisema y asma en Reino Unido desde enero de 1974 hasta diciembre de 1979) del software estadístico R. Observe el formato de cada gráfica (barras, colores, valores en los ejes, etiquetas, etc.). Consulte la ayuda de las 3 bases de datos para elegir la variable correcta que corresponde a cada histograma.
# Three time series giving the monthly deaths from bronchitis, emphysema and asthma in the UK, 1974–1979, both sexes (ldeaths), males (mdeaths) and females (fdeaths).
######### Matriz de arreglo en pantalla. #######
M=matrix(c(1,1,2,3),nrow=2,ncol=2)
M
##      [,1] [,2]
## [1,]    1    2
## [2,]    1    3
layout(M)
layout.show(n=3)

par(bty="n")
########### Decesos Mensuales. ############
hist(ldeaths, 
main="Decesos Mensuales por Enfermedades Respiratorias en Reino Unido",
     col.main="darkblue", 
     cex.main=0.9,
     col=cm.colors(n=6,rev=TRUE,alpha=1),  # alpha =1 opaque
     col.axis="#AA4A44",                   # rojo ladrillo
     col.lab="forestgreen",
     xlab="Decesos",
     ylab="Cantidad de Meses",
     ylim=c(0,28),
     labels=TRUE)
########### Decesos Mensuales en Mujeres. ############
hist(fdeaths, 
     main="Decesos Mensuales en Mujeres",
     col.main="darkblue", 
     cex.main=1,
     col="magenta",
     col.axis="#AA4A44",                  # rojo ladrillo
     col.lab="forestgreen",
     xlab="Decesos",
     xaxp=c(300,1200,10),
     ylab="Cantidad de Meses", 
     density = 25,
     angle= 45,
     border="black")
########### Decesos Mensuales en Hombres. ############
hist(mdeaths, 
     main="Decesos Mensuales en Hombres",
     col.main="darkblue", 
     cex.main=1,
     col="cyan",
     col.axis="#AA4A44",                 # rojo ladrillo
     col.lab="forestgreen",
     xlab="Decesos",
     xaxp=c(800,2800,10),
     ylab="Cantidad de Meses", 
     density = 25,
     angle= 135,
     border="black")

### Ejercicio 3
# Realizar el siguiente gráfico utilizando la base de datos Seatbelts
# (personas lesionadas o fallecidas mensualmente por accidentes
# automovilísticos en Gran Bretaña desde enero de 1969 hasta diciembre de
# 1984) del software estadístico R. Observe el formato de la gráfica
# (ordenamiento, colores, etiquetas, etc.). NO debe incluir la columna
# referente a la aplicación de la ley de tránsito al realizar el gráfico.
head(Seatbelts)
##      DriversKilled drivers front rear   kms PetrolPrice VanKilled law
## [1,]           107    1687   867  269  9059   0.1029718        12   0
## [2,]            97    1508   825  265  7685   0.1023630         6   0
## [3,]           102    1507   806  319  9963   0.1020625        12   0
## [4,]            87    1385   814  407 10955   0.1008733         8   0
## [5,]           119    1632   991  454 11823   0.1010197        10   0
## [6,]           106    1511   945  427 12391   0.1005812        13   0
Seatbelt=Seatbelts[,-8] #NO debe incluir la ley de tránsito
head(Seatbelt)
##      DriversKilled drivers front rear   kms PetrolPrice VanKilled
## [1,]           107    1687   867  269  9059   0.1029718        12
## [2,]            97    1508   825  265  7685   0.1023630         6
## [3,]           102    1507   806  319  9963   0.1020625        12
## [4,]            87    1385   814  407 10955   0.1008733         8
## [5,]           119    1632   991  454 11823   0.1010197        10
## [6,]           106    1511   945  427 12391   0.1005812        13
seatbelt=ts(Seatbelt, start=c(1969,1), end=c(1984,12), frequency=12)
head(seatbelt)
##      DriversKilled drivers front rear   kms PetrolPrice VanKilled
## [1,]           107    1687   867  269  9059   0.1029718        12
## [2,]            97    1508   825  265  7685   0.1023630         6
## [3,]           102    1507   806  319  9963   0.1020625        12
## [4,]            87    1385   814  407 10955   0.1008733         8
## [5,]           119    1632   991  454 11823   0.1010197        10
## [6,]           106    1511   945  427 12391   0.1005812        13
fechas=seq(as.Date("1969-01-01"), as.Date("1984-12-01"), by="1 month")
stars(x=seatbelt, 
      main="Lesiones y Decesos Mensuales por Accidentes Automovilisticos en Gran Bretaña",
      col.main="purple",
      cex=0.5,
      sub="Enero de 1969 a Diciembre de 1984",
      col.sub="coral",
      cex.sub=1.5,
      #frame.plot = c(2,2),
      labels=format(fechas,format="%b %Y"),
      flip.labels=FALSE,
      key.xpd= NA,  # 
      key.loc = c(29,22),   # coordenadas del pie con legendas
      full=TRUE,      # dibuja el pie completo
      draw.segments = TRUE,
      col.segments = rainbow(7),
      ncol=24,
      nrow=8)

### Ejercicio #4
# Realizar el siguiente gráfico utilizando la información del archivo
# “Encuesta Partidos Politicos.csv” referente a la preferencia en México
# para las votaciones 2022 de personas de la 3ra. edad, adultos y jóvenes.
# Observe el formato de la gráfica (fondo, imágenes, colores, etiquetas,
# etc.). Utilice el paquete magick para leer las imágenes en R.
# install.packages("magick")
library(magick)
## Linking to ImageMagick 6.9.12.93
## Enabled features: cairo, fontconfig, freetype, heic, lcms, pango, raw, rsvg, webp
## Disabled features: fftw, ghostscript, x11
#Partidos=read.table(file.choose(), header=TRUE, sep="\t")
Partidos=read.table("Encuesta Partidos Políticos.txt", header=TRUE, sep="\t")
head(Partidos)
names(Partidos)
## [1] "CategoríaEdad"   "PartidoPolítico"
dim(table(Partidos$PartidoPolítico,Partidos$CategoríaEdad))
## [1] 7 3
Mpartidos=as.matrix(table(Partidos$PartidoPolítico,Partidos$CategoríaEdad), nrow=7,ncol=3, byrow=TRUE)
MPartidos=as.numeric(Mpartidos)
Mpartidos
##         
##          3raEdad Adulto Joven
##   MC         194    377   122
##   MORENA     872   1720   484
##   PAN        573    971   256
##   PRD        136    267    72
##   PRI        420    738   218
##   PT          59     95    25
##   PVEM       112    219    70
colores=c("darkorange", "brown","blue", "gold", "white", "red", "green")
######Tabla=Mpartidos[,]
#rownames(MPartidos)=c("3raEdad","Adulto", "Joven")
#colnames(MPartidos)=c("MC","MORENA", "PAN","PRD", "PRI","PT", "PVEM")
mc=image_read("https://logowik.com/content/uploads/images/partido-movimiento-ciudadano-mexico8801.logowik.com.webp")
mc=image_scale(mc, "80")

morena=image_read(
  "https://morena.org/wp-content/uploads/2021/02/logo_retina.png")
morena=image_scale(morena, "180")

pan =image_read("https://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/PAN_logo_%28Mexico%29.svg/2048px-PAN_logo_%28Mexico%29.svg.png")
pan=image_scale(pan, "80")

prd=image_read("https://logowik.com/content/uploads/images/prd-mexico5095.logowik.com.webp")
prd=image_scale(prd, "80")

pri=image_read("https://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/PRI_logo_%28Mexico%29.svg/1916px-PRI_logo_%28Mexico%29.svg.png")
pri=image_scale(pri, "80")

pt=image_read("https://upload.wikimedia.org/wikipedia/commons/4/4e/Logo_PT.JPG")
pt=image_scale(pt, "80")

pvem=image_read("https://upload.wikimedia.org/wikipedia/commons/thumb/f/f4/Logo_Partido_Verde_%28México%29.svg/1200px-Logo_Partido_Verde_%28México%29.svg.png")
pvem=image_scale(pvem, "80")
#legend=c(mc," MC",morena," MORENA",pan, " PAN",prd," PRD",pri, " PRI",pt,"PT",pvem, "PVEM")
#leg=c(mc,morena,pan, prd,pri,pt,pvem)
#leyenda=image_append(image_scale(leg, "20"), stack = TRUE)
#lege=image_annotate(leyenda, " MC", size = 10, location = "+10", color = "black")
par(bg = "ivory")
barplot(height=Mpartidos,
        main="Encuesta Votaciones México 2022",
        col.main="violetred",
        col.axis="purple",
        cex.main=2,
        ylab="Personas",
        col.lab="purple",
        yaxp=c(0,1800,18),
        las=1,
        col=colores,
        legend.text=TRUE,
        ylim=c(25,1750),
        beside=TRUE)
rasterImage(mc, 22.5, 1425, 23.5, 1525)
rasterImage(morena, 22.5, 1250, 23.5, 1350)
rasterImage(pan, 22.6, 1075, 23.35, 1175)
rasterImage(prd, 22.5, 875, 23.5, 1000)
rasterImage(pri, 22.6, 700, 23.35, 800)
rasterImage(pt, 22.6, 500, 23.35, 600)
rasterImage(pvem, 22.5, 325, 23.5, 425)
grid(nx=0,ny=18,col="gray")

#grid.raster(pan)
#legend(x="topright",legend=leg, lty=1, lwd=2)

#### probrar agregar un marco de la grafica
#img=image_composite(pan,leyenda, offset = "+70+30")
#img <- image_draw(leyenda)
#print(as.raster(img))
#legend(x="topright",legend=c(mc," MC",morena," MORENA",pan, " PAN",prd,
      #                       " PRD",pri, " PRI",pt,"PT",pvem, "PVEM"), lty=1, #lwd=2),
# Ejercicio #5
# Realizar el siguiente gráfico utilizando la base de datos faithful (correspondiente a las erupciones del géiser Old Faithful del Parque Nacional Yellowstone) del software estadístico R. Observe el formato de la gráfica (imagen, colores, etiquetas, formatos, etc.). Utilice como referencia para la partición de la ventana una matriz de 4 renglones y 5 columnas.
#
head(faithful)
######### Matriz de arreglo en pantalla. #######
M=matrix(c(1,1,1,1,2,1,1,1,1,2,3,3,3,3,4,3,3,3,3,4),nrow=4,ncol=5, byrow=TRUE)
M
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    1    1    1    2
## [2,]    1    1    1    1    2
## [3,]    3    3    3    3    4
## [4,]    3    3    3    3    4
layout(M)
layout.show(n=4)

par(bty="n")
## Grafica bigotes HORIZONTAL
boxplot(faithful$waiting,
        main="Géiser Old Faithful",
        col.main="red",
        cex.main=2,
        horizontal=TRUE,
        col="olivedrab",
        border="blue",
        axes = FALSE,
        lwd=1.5,
        lty=1,
        boxwex=0.5)

#https://cran.r-project.org/web/packages/magick/vignettes/intro.html
##### Imagen Geyser
geyser=image_read("https://media1.tenor.com/m/6fjECiIebZgAAAAC/geyser-nature.gif")%>%
  image_scale("200x") %>%
  image_quantize(1280)
plot(as.raster(geyser))
## Grafica xy
plot(faithful$eruptions,
     faithful$waiting,
     type="p", 
     pch=17,
     cex=0.9,
     xlab="Duracion de la Erupción", 
     ylab="Tiempo de Espera", 
     col="deepskyblue", 
     axes=FALSE)
axis(3, at= seq(1.5,5.1,0.1),las=2,col.lab="brown", cex=0.1,
     col.axis="darkgreen", col="blue" ) # Añadir el eje X superior
     #xaxp=c(1.5,5.1,10)
    
axis(4, at= seq(40,100,5), las=2,col.lab="brown", cex=0.3,
     col.axis="orange", col="blue") # Añadir el eje Y derecho
     #yaxp=c(40,100,10)
     
## GRAFICA DE BIGOTES VERTICAL
boxplot(faithful$eruptions,
        horizontal=FALSE,
        col="orange",
        border="blue",
        axes = FALSE,
        lwd=1.5,
        lty=1,
        boxwex=1.5)