Vicente Mallama

2023-10-12

La creación de gráficos en R Studio es esencial para visualizar y comunicar de manera efectiva los patrones y tendencias en los datos, lo que facilita la toma de decisiones informadas en la ciencia de datos y la investigación.

Para la generación de un gráfico, es indispensable contar con un conjunto de datos previamente adquirido, el cual puede ser importado mediante una instrucción en línea de comandos o directamente a través de la funcionalidad provista en el menú “Importar dataset” de la interfaz de usuario.

En este caso voy a importar una base de datos referente a un experimento llamado “Crecimiento poblacional de cepas nativas e invasivas del barrenador más grande de los granos, Prostephanus truncatus, en tres híbridos de maíz”

DATOS <- read.csv2("D:/AGRONOMIA/SEMESTRE 9/SOFTWARE R/EJERCICIO2/DATOS.csv")

Ahora, voy a analisar mis datos, haciendo uso de distintas funciones como:

1. head: Nos muestra las primeras filas de la base de datos

head(DATOS)
##   Hibrido Cepa_insecto Repeticion Numero_de_adultos Peso_Del_Frass IDK
## 1  Pico 1    Mexico 1s         A1                50            2.8  32
## 2  Pico 1    Mexico 1s         A2                33            2.1  26
## 3  Pico 1    Mexico 1s         A3                33            2.1  37
## 4  Pico 1    Mexico 1s         B1               107            3.4  35
## 5  Pico 1    Mexico 1s         B2                40            1.6  29
## 6  Pico 1    Mexico 1s         B3                62            3.0  45
##   Peso_total_granos
## 1              15.9
## 2              17.0
## 3              16.7
## 4              13.7
## 5              17.4
## 6              15.7

2. tail: Nos muestra las últimas filas de la base de datos

tail(DATOS)
##      Hibrido Cepa_insecto Repeticion Numero_de_adultos Peso_Del_Frass IDK
## 58 A6N672  3     Ghana 2s         C1                51           1.79  33
## 59 A6N672  3     Ghana 2s         C2                71           2.75  32
## 60 A6N672  3     Ghana 2s         C3                65           2.90  42
## 61 A6N672  3      Control          1                 0           0.00   0
## 62 A6N672  3      Control          2                 0           0.00   0
## 63 A6N672  3      Control          3                 0           0.00   0
##    Peso_total_granos
## 58             17.14
## 59             16.16
## 60             15.88
## 61             19.97
## 62             19.94
## 63             20.10

3. dim: Nos muestra las dimensiones de la base de datos (número de filas y columnas)

dim(DATOS)
## [1] 63  7

4. str: Nos muestra la estructura de la base de datos (tipos de variables y resumen)

str(DATOS)
## 'data.frame':    63 obs. of  7 variables:
##  $ Hibrido          : chr  "Pico 1" "Pico 1" "Pico 1" "Pico 1" ...
##  $ Cepa_insecto     : chr  "Mexico 1s" "Mexico 1s" "Mexico 1s" "Mexico 1s" ...
##  $ Repeticion       : chr  "A1" "A2" "A3" "B1" ...
##  $ Numero_de_adultos: int  50 33 33 107 40 62 65 81 87 24 ...
##  $ Peso_Del_Frass   : num  2.8 2.1 2.1 3.4 1.6 3 2.2 2.9 3 1.5 ...
##  $ IDK              : int  32 26 37 35 29 45 32 36 45 25 ...
##  $ Peso_total_granos: num  15.9 17 16.7 13.7 17.4 15.7 16.1 15.4 14.9 17.4 ...

5. summary: Proporciona un resumen estadístico de cada variable en la base de datos

summary(DATOS)
##    Hibrido          Cepa_insecto        Repeticion        Numero_de_adultos
##  Length:63          Length:63          Length:63          Min.   :  0.00   
##  Class :character   Class :character   Class :character   1st Qu.: 23.50   
##  Mode  :character   Mode  :character   Mode  :character   Median : 40.00   
##                                                           Mean   : 41.98   
##                                                           3rd Qu.: 56.50   
##                                                           Max.   :116.00   
##  Peso_Del_Frass       IDK        Peso_total_granos
##  Min.   :0.000   Min.   : 0.00   Min.   :13.70    
##  1st Qu.:1.600   1st Qu.:26.50   1st Qu.:16.06    
##  Median :2.140   Median :32.00   Median :16.96    
##  Mean   :1.960   Mean   :28.57   Mean   :17.13    
##  3rd Qu.:2.615   3rd Qu.:36.50   3rd Qu.:17.70    
##  Max.   :3.700   Max.   :45.00   Max.   :20.40

6. names: Muestra los nombres de las columnas en la base de datos

names(DATOS)
## [1] "Hibrido"           "Cepa_insecto"      "Repeticion"       
## [4] "Numero_de_adultos" "Peso_Del_Frass"    "IDK"              
## [7] "Peso_total_granos"

Ahora vamos a cargar algunas librerias necesarias para la creación de gráficos

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.3     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.3     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ 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
library(plotly)
## 
## Attaching package: 'plotly'
## 
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## The following object is masked from 'package:graphics':
## 
##     layout
library(ggrepel)
library(PerformanceAnalytics)
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## 
## 
## ######################### Warning from 'xts' package ##########################
## #                                                                             #
## # The dplyr lag() function breaks how base R's lag() function is supposed to  #
## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or       #
## # source() into this session won't work correctly.                            #
## #                                                                             #
## # Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #
## # conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop           #
## # dplyr from breaking base R's lag() function.                                #
## #                                                                             #
## # Code in packages is not affected. It's protected by R's namespace mechanism #
## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning.  #
## #                                                                             #
## ###############################################################################
## 
## Attaching package: 'xts'
## 
## The following objects are masked from 'package:dplyr':
## 
##     first, last
## 
## 
## Attaching package: 'PerformanceAnalytics'
## 
## The following object is masked from 'package:graphics':
## 
##     legend
library(reshape2)
## 
## Attaching package: 'reshape2'
## 
## The following object is masked from 'package:tidyr':
## 
##     smiths

Grafico de barras

Vamos a realizar ahora un grafico de barras, con las columnas: Hibrido vs. Peso total de los granos. Para comparar cómo varía el peso de los granos en función del híbrido de maíz.

ggplot(DATOS, aes(x = Hibrido, y = `Peso_total_granos`)) +
  geom_bar(stat = "identity") +
  labs(x = "Hibrido", y = "Peso total de los granos") +
  theme_minimal()

Vamos a modificar algunas etiquetas, para que quede mejor:

ggplot(DATOS, aes(x = Hibrido, y = `Peso_total_granos`)) +
  geom_bar(stat = "identity", fill = "purple") +
  labs(
    title = "Grafico de Barras", #colocando titulo
    subtitle = "Hibrido vs. Peso total de los granos",
    x = "Hibrido",
    y = "Peso total de los granos",
    caption = "Fuente: https://data.nal.usda.gov/"
  ) +
  scale_y_continuous(limits = c(0, 500)) +
  theme_minimal() #cambiando tema

Histogramas

Vamos a crear un Histograma de la columna Número IDK, para analizar la distribución de la cantidad de granos dañados por insectos (IDK), ademas de adicionar algunos labels para mejorar e grafico de una vez.

# Creando  el histograma
ggplot(data = DATOS) +
  geom_histogram(aes(x = IDK), fill = "Orange", #colocando color
                 color = "black", bins = 40) +
  labs(x = "IDK",
       y = "Frecuencia") +
  theme_minimal()

Grafico de Puntos

Vamos a crear un Grafico de puntos entre Peso total de los granos vs. Número IDK, para analizar cómo el peso total de los granos se relaciona con el número de granos dañados por insectos (IDK) y asi poder entender si existe alguna relación entre el peso total de los granos y los daños causados por insectos.

ggplot(DATOS, aes(x = Numero_de_adultos, y = Peso_total_granos)) +
  geom_point(aes(color = Cepa_insecto), size = 3) +  # Colores basados en 'Cepa_insecto'
  labs(title = "Grafico de Dispersion",
       x = "Numero de Adultos",
       y = "Peso Total de Granos") +
  theme_minimal() +  # Estilo minimalista
  theme(plot.title = element_text(hjust = 0.5))  # Centrar el título

Gráfico de lineas

Voy a crear un gráfico de líneas para ver cómo cambia el Peso total de los granos a lo largo de las Repeticiones para diferentes Hibridos.

# Creando un gráfico de líneas
ggplot(DATOS, aes(x = Repeticion, y = Peso_total_granos, group = Hibrido, color = Hibrido)) +
  geom_line(size = 1.5) +  # Ajusta el valor de 'size' para hacer las líneas más gruesas
  labs(title = "Grafico de Lineas",
       x = "Repeticion",
       y = "Peso Total de Granos") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))
## 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.

Gráficos interactivos

A continuación se convertirá el gráfico anterior en un gráfico interactivo para que sea más amigable con el usuario.

ggplotly(
  ggplot(DATOS, aes(x = Repeticion, y = Peso_total_granos, group = Hibrido, color = Hibrido)) +
  geom_line(size = 1.5) +  # Ajusta el valor de 'size' para hacer las líneas más gruesas
  labs(title = "Grafico Interactivo",
       x = "Repeticion",
       y = "Peso Total de Granos") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))
)

Muchas gracias.