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:
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
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
dim(DATOS)
## [1] 63 7
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 ...
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
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
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
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()
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
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.
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.