Last updated: 2021-08-02

Checks: 7 0

Knit directory: 2021/

This reproducible R Markdown analysis was created with workflowr (version 1.6.2). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.


Great! Since the R Markdown file has been committed to the Git repository, you know the exact version of the code that produced these results.

Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.

The command set.seed(20210412) was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.

Great job! Recording the operating system, R version, and package versions is critical for reproducibility.

Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.

Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.

Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.

The results in this page were generated with repository version 36a88d7. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.

Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish or wflow_git_commit). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:


Ignored files:
    Ignored:    .Rhistory
    Ignored:    .Rproj.user/
    Ignored:    analysis/hero-image.html
    Ignored:    analysis/poke_logo.png

Untracked files:
    Untracked:  Curso_Bioestadistica_MTripp_cuatriII.docx
    Untracked:  Curso_Bioestadistica_MTripp_cuatriII.pdf
    Untracked:  Diapositivas/
    Untracked:  Prueba_markdown.Rmd
    Untracked:  Prueba_markdown.pdf
    Untracked:  README.html
    Untracked:  Resources/
    Untracked:  Tarea_Tstudent.Rmd
    Untracked:  Tarea_Tstudent.docx
    Untracked:  Tarea_Tstudent.html
    Untracked:  Tarea_Tstudent.pdf
    Untracked:  analysis/Clase13_noParam.Rmd
    Untracked:  analysis/hero_backgroud.jpg
    Untracked:  analysis/images/
    Untracked:  analysis/style.css
    Untracked:  analysis/test.Rmd
    Untracked:  code/tarea_macrograd.R
    Untracked:  data/CS_subset.csv
    Untracked:  data/Consumo_oxigeno_wide.csv
    Untracked:  data/Darwin_esp.csv
    Untracked:  data/Data_enzimas_Experimento1.txt
    Untracked:  data/Data_enzimas_Experimento2.txt
    Untracked:  data/Data_enzimas_Experimento3.txt
    Untracked:  data/Data_enzimas_Experimento4.txt
    Untracked:  data/DownloadFestival(No Outlier).dat
    Untracked:  data/Festival.csv
    Untracked:  data/Hful_metabolitos_ver2.csv
    Untracked:  data/Longitud_noParam.csv
    Untracked:  data/LungCapData.txt
    Untracked:  data/LungCapDataEsp.csv
    Untracked:  data/PalmerPenguins.csv
    Untracked:  data/Pokemon_tabla.csv
    Untracked:  data/Pokemon_tabla.xls
    Untracked:  data/RExam.dat
    Untracked:  data/Rexamendat.csv
    Untracked:  data/Tabla1_Muestreo.txt
    Untracked:  data/Transcriptome_Anotacion.csv
    Untracked:  data/Transcriptome_DGE.csv
    Untracked:  data/Vinogradov_2004_Titanic.tab
    Untracked:  data/Vinogradov_2004_Titanic.tab.csv
    Untracked:  data/data_tukey.txt
    Untracked:  data/exp_macrogard_growth.tab
    Untracked:  data/exp_macrogard_rna-dna.tab
    Untracked:  data/fertilizantes_luz.csv
    Untracked:  data/gatos_sueno.csv
    Untracked:  data/macrogard_crecimiento.csv
    Untracked:  data/pokemon_extended.csv
    Untracked:  output/Plot_all_penguins.pdf
    Untracked:  output/Plot_all_penguins.tiff
    Untracked:  output/graficos/

Unstaged changes:
    Modified:   analysis/_site.yml

Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.


These are the previous versions of the repository in which changes were made to the R Markdown (analysis/Clase5_ggplot.Rmd) and HTML (docs/Clase5_ggplot.html) files. If you’ve configured a remote Git repository (see ?wflow_git_remote), click on the hyperlinks in the table below to view the files as they were in that past version.

File Version Author Date Message
Rmd 36a88d7 Miguel Tripp 2021-08-02 workflowr::wflow_publish(c(“analysis/index.Rmd”, “analysis/about.Rmd”,
html 6d3594c Miguel Tripp 2021-08-02 Build site.
Rmd 2bbf68d Miguel Tripp 2021-08-02 workflowr::wflow_publish(c(“analysis/index.Rmd”, “analysis/about.Rmd”,
Rmd 501034d Miguel Tripp 2021-08-02 Cambios despliegue graficos en theme
html 501034d Miguel Tripp 2021-08-02 Cambios despliegue graficos en theme
html c8dbd17 Miguel Tripp 2021-08-01 Build site.
Rmd 7628720 Miguel Tripp 2021-08-01 workflowr::wflow_publish(c(“analysis/index.Rmd”, “analysis/about.Rmd”,
html 5aafed2 Miguel Tripp 2021-08-01 Build site.
Rmd 9ae8f9f Miguel Tripp 2021-08-01 workflowr::wflow_publish(c(“analysis/index.Rmd”, “analysis/about.Rmd”,
html 2bc601a Miguel Tripp 2021-07-31 Build site.
Rmd b4e67dc Miguel Tripp 2021-07-31 workflowr::wflow_publish(c(“analysis/index.Rmd”, “analysis/about.Rmd”,
html 03db7ff Miguel Tripp 2021-07-25 Build site.
html fcb9047 Miguel Tripp 2021-07-25 Build site.
Rmd 9a992a0 Miguel Tripp 2021-07-25 workflowr::wflow_publish(c(“analysis/index.Rmd”, “analysis/about.Rmd”,
html 2adc7a9 Miguel Tripp 2021-07-24 Build site.
html 9d09420 Miguel Tripp 2021-07-22 Build site.
html 0f7eb2d Miguel Tripp 2021-07-12 Build site.
html 82e4deb Miguel Tripp 2021-07-08 Build site.
html bc7c1d7 Miguel Tripp 2021-07-07 Build site.
html 01ac301 Miguel Tripp 2021-07-04 Build site.
html 392444f Miguel Tripp 2021-07-04 Build site.
html c188ae8 Miguel Tripp 2021-06-29 Build site.
html 1136768 Miguel Tripp 2021-06-28 Build site.
html a33d4bb Miguel Tripp 2021-06-23 Build site.
html 209299f Miguel Tripp 2021-06-21 Build site.
html d025507 Miguel Tripp 2021-06-17 Build site.
html fb9e91e Miguel Tripp 2021-06-16 Build site.
html c5dfe6a Miguel Tripp 2021-06-14 Build site.
html 2352c47 Miguel Tripp 2021-06-12 Build site.
html 99c3644 Miguel Tripp 2021-06-05 Build site.
Rmd 624db7c Miguel Tripp 2021-06-05 Publish the initial files for myproject
html fbd7857 Miguel Tripp 2021-06-05 Build site.
Rmd 5028622 Miguel Tripp 2021-06-05 Publish the initial files for myproject
html 87a646f Miguel Tripp 2021-06-02 Build site.
html 47a7147 Miguel Tripp 2021-05-31 Build site.
html 95c661f Miguel Tripp 2021-05-31 Build site.
html 34660de Miguel Tripp 2021-05-24 Build site.
html da04854 Miguel Tripp 2021-05-24 Build site.
html 3321935 Miguel Tripp 2021-05-24 Build site.
html 3d12902 Miguel Tripp 2021-05-16 Build site.
Rmd 5e3c88f Miguel Tripp 2021-05-16 Publish the initial files for myproject
html 20b3aab Miguel Tripp 2021-05-16 Build site.
html f20dcb1 Miguel Tripp 2021-05-16 Build site.
html b1ca7f3 Miguel Tripp 2021-05-16 Build site.
Rmd 5126d03 Miguel Tripp 2021-05-16 Publish the initial files for myproject

@AllisonHorst

@AllisonHorst

1 Generalidades

ggplot es un motor gráfico basado en la gramática grafica de Wilkinson Wilkinson, 2005. Bajo este contexto, un gráfico es una serie de capas (layers) similares a una transparecia, con algo impreso en ellas, que puede ser texto, puntos, lineas, barras, imagenes de pollitos o cualquier otro tipo de representación. La imagen final, cada una de estas capas se colocan una sobre otra.

imagen de Andy Field (R)

2 geoms y aesthetics

Como se observa en la figura anterior, cada capa contiene objetos visuales (barras, puntos, text, etc) conocidos como geoms() (por objetos geométricos).

Estas geometricas también tienen propiedades estéticas (aesthetics; aes()) las cuales determinan como lucen y donde se ubican. Estos estéticos controlan la apariencia de cada uno de los elementos de la gráfica (color, forma, etsilo, etc) y puede ser especificado de manera individual para cada geometría o de manera global.

En resumen, los elementos necesarios para representar un gráfico con ggplot2son los siguientes:

  • Un data frame que contiene los datos que se quieren visualizar.
  • Los aesthetics, es decir, una lista de relaciones entre las variables del fichero de datos y determinados aspectos del gráfico (como por ejemplo coordenadas, formas o colores).
  • Los geoms, que especifican los elementos geométricos (puntos, líneas, círculos, etc) que se van a representar.
Algunos tipos de geometrias (geoms)

Algunos tipos de geometrias (geoms)

3 Los datos

Para esta practica, utilizaremos la base de datos de PalmerPenguins.csv la cual utilizamos previamente en la practica de gráficos base. Puedes descargar los datos aquí.

4 Funcionamiento básico

Para poder utilizar ggplot2, podemos cargar solamente la librería ggplot2 o cargar todo el conjunto de paquetes tidyverse el cual incluye herramientas que hemos usado hasta ahora como dplyr, tidyr, readr, tibble y ggplot2.

library(tidyverse)

penguins <- read_csv("data/PalmerPenguins.csv")
penguins <- penguins[complete.cases(penguins), ]

5 Funcion ggplot()

Para crear un gráfico se usa el comando ggplot():

ggplot(data = penguins)

Al ejecutar la función, no da error pero no vemos ninguna gráfica. Esto se debe a que no hemos indicado a ggplot cuales son las coordenadas y esteticos, ni cuales son las geometrías.

Para desginar los esteticos, definimos el plano usando los datos de la longitud del culmen y la masa corporal ejecutando:

ggplot(data = penguins, aes(x = culmen_length_mm, y = body_mass_g))

El argumento aes() es sinónimo de estética, ggplot2 considera que el eje X e Y de la gráfica es estético, junto con el color, el tamaño, la forma, el relleno, etc. Se puede agregar cualquier estética que se desee dentro del argumento aes(), como por ejemplo indicar los ejes X e Y, especificando las variables respectivas del conjunto de datos. La variable en función de la cual el color, tamaño, forma y trazo debe cambiar también se puede especificar aquí mismo. Debes tener en cuenta que la estética especificada aquí será heredada por todas las capas geom que se agregarán posteriormente.

Sin embargo, aún no vemos ninguna gráfica, ya que para esto es necesario indicar que tipo de geometria (geom()) de gráfica queremos utilizar.

Para crear un diagrama, por ejemplo, de dispersión es necesario agregarle la geometria geom_point(). Es importante recalcar que cada nueva capa que agreguemos al gráfico se agrega con el simbolo +

ggplot(data = penguins, aes(x = culmen_length_mm, y = body_mass_g))+
  geom_point()

5.1 Aesthetics

Como mencionamos, es posible agregar diferentes estéticos a la gráfica para controlar diversos aspectos como color, tamaño, forma, etc. Esto nos permite asignarle un estético a los grupos.

por ejemplo, podemos asignarle un color diferente a cada especie con el argumento color

ggplot(data = penguins, aes(x = culmen_length_mm, y = body_mass_g, color = species))+
  geom_point()

Y asignarle una forma diferente a por sexo con el argumento shape

ggplot(data = penguins, aes(x = culmen_length_mm, y = body_mass_g, color = species, shape = sex))+
  geom_point()

o cambiar el tamaño con size

ggplot(data = penguins, aes(x = culmen_length_mm, y = body_mass_g, color = species, shape = sex, size = culmen_length_mm))+
  geom_point()

Es posible definir los elementos estéticos (aesthetics) de manera global, lo que afectará a todas las geometrías que se vayan agregando, o se puede definir de manera indiviual por geometría

De manera que se puede expresar de esta forma:

ggplot(data = penguins, aes(x = culmen_length_mm, y = body_mass_g, color = species))+
  geom_point()+
  geom_smooth(method = "lm")
`geom_smooth()` using formula 'y ~ x'

o de esta:

ggplot(data = penguins)+
  geom_point(aes(x = culmen_length_mm, y = body_mass_g, color = species))+
  geom_smooth(aes(x = culmen_length_mm, y = body_mass_g, color = species), method = "lm")
`geom_smooth()` using formula 'y ~ x'

5.2 Geometrias

Los nombres de las funciones de geometría siguen el patrón: geom_X donde X es el nombre de la geometría. Algunos ejemplos incluyen geom_point, geom_bar y geom_histogram.

A continuación repasaremos algunas de las geometrias mas comunes:

5.3 Graficar una variable continua

5.3.1 geom_density()

c_plot <- ggplot(data= penguins, aes(x = culmen_length_mm, fill = island))

c_plot + geom_density(alpha = 0.4)

5.3.2 geom_histogram()

c_plot + geom_histogram(alpha = 0.4)
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

5.3.3 geom_dotplot

c_plot + geom_dotplot(alpha = 0.4)
Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.

5.3.4 geom_qqplot()

ggplot(data = penguins, aes(sample = culmen_length_mm, col = island))+
  geom_qq() +
  geom_qq_line()

5.4 Gráficas de variables discretas

5.4.1 geom_bar()

ggplot(data = penguins, aes(x = species, fill = species))+
  geom_bar()

ggplot(data = penguins, aes(x = species, fill = sex ))+
  geom_bar()

ggplot(data = penguins, aes(x = species, fill = sex ))+
  geom_bar(position = "dodge")

ggplot(data = penguins, aes(x = species, fill = sex ))+
  geom_bar(position = "fill")

5.5 Gráficas de una variable discreta + continua

5.5.1 geom_boxplot()

ggplot(data = penguins, aes(x = species, y = culmen_length_mm, fill = sex))+
  geom_boxplot()

5.5.2 geom_dotplot()

ggplot(data = penguins, aes(x = species, y = culmen_length_mm, fill = sex))+
  geom_dotplot(binaxis = "y", stackdir = "center", position = "dodge", binwidth = 0.75)

5.5.3 geom_violin()

ggplot(data = penguins, aes(x = species, y = culmen_length_mm, fill = sex))+
  geom_violin()

5.5.4 jitter

ggplot(data = penguins, aes(x = species, y = culmen_length_mm, fill = sex, col = sex))+
  geom_point(position = position_jitterdodge(jitter.width = 0.1), size = 2)

5.6 Gráficas con una variable continua + continua

5.6.1 geom_label()

ggplot(data = penguins, aes(x = body_mass_g, y = culmen_length_mm, col = sex))+
  geom_label(aes(label = island))

5.6.2 geom_rug()

ggplot(data = penguins, aes(x = body_mass_g, y = culmen_length_mm, col = sex))+
  geom_rug()

5.6.3 geom_point()

ggplot(data = penguins, aes(x = body_mass_g, y = culmen_length_mm, col = sex))+
  geom_point()

5.7 grafica de lineas

Esta geometría es ideal cuando queremos graficar un elemento a lo largo del tiempo o de alguna condición. Como ejemplo de esta geometría vamos a utilizar los datos consuom_oxigeno_wide.csvel cual contiene el consumo de oxígeno de juveniles de abulón azul a lo largo de seis días. Estos datos se pueden descargar aquí

Para usar esta geometria, es necesario usar el aestetics de group:

MO <- read_csv("data/Consumo_oxigeno_wide.csv")

-- Column specification --------------------------------------------------------
cols(
  individuo = col_character(),
  dia1 = col_double(),
  dia2 = col_double(),
  dia3 = col_double(),
  dia4 = col_double(),
  dia5 = col_double(),
  dia6 = col_double()
)
MO_long <- MO %>% 
  pivot_longer(-individuo, names_to = "Dia", values_to = "MO")

ggplot(data = MO_long, aes(x = Dia, y = MO, group = individuo, col = individuo))+
  geom_line()

6 Edición de las gráficas

6.1 Titulos y etiquetas

Al igual que en las gráficas base de R, es posible editar los titulos principales y cambiar las etiquetas. Para esto, es posible utilizar las funciones ylab() , xlab() o ggtitle(), pero resulta mas practico utilizar la funcion labs()

ggplot(data = penguins, aes(x = culmen_length_mm, y = body_mass_g, col = species, shape = sex))+
  geom_point()+
  labs(x = "Longitud del culmen (mm)",
       y = "Masa corporal (g)",
       title = "Relación pico y masa",
       subtitle = "Datos por especie",
       caption = "Datos: Palmer Penguins",
       col = "Especie",
       shape = "Sexo")

6.2 theme()

Es posible utilizar la función theme() para controlar parámetros gráficos independientes de los datos, tales como color de fondo, tamaño y tipo de letra, margenes, leyenda, etc.

Los parametros que se pueden controlar con themes()son abundantes, sin embargo, existen varios themes en ggplot2 que se pueden usar rapidamente para cambiar el formato:

  • theme_gray()
  • theme_bw()
  • theme_linedraw()
  • theme_light()
  • theme_minimal()
  • theme_classic()

Por ejemplo, podemos usat theme_minimal() el cual no contiene lineas de los ejes

ggplot(data = penguins, aes(x = culmen_length_mm, y = body_mass_g, col = species, shape = sex))+
  geom_point()+
  labs(x = "Longitud del culmen (mm)",
       y = "Masa corporal (g)",
       title = "Relación pico y masa",
       subtitle = "Datos por especie",
       caption = "Datos: Palmer Penguins",
       col = "Especie",
       shape = "Sexo")+
  theme_minimal()

con los otros temas, la gráfica se verian así

6.3 Ajusta el color de los elementos geometricos

Cuando los elementos geometricos no se estan separados por factores, se puede especificar el color, relleno y forma dentro de esa geometria. Por ejemplo:

ggplot(data = penguins, aes(y = culmen_length_mm, x = island))+
  geom_boxplot(fill = "lightblue", col = "salmon")+
  geom_point(col = "darkblue", pch = 5)

Cuando tenemos datos por grupos, es posible ajustar los colores y el relleno de manera manual con:

  • scale_color_manual()
  • scale_fill_manual()

los valores de color se especifican dentro del parámetro values

ggplot(data = penguins, aes(x = culmen_length_mm, y = body_mass_g, col = island, fill = island))+
  geom_point()+
  scale_color_manual(values = c("#999999", "#E69F00", "#56B4E9"))

colores <- c("#999999", "#E69F00", "#56B4E9")

ggplot(data = penguins, aes(x = culmen_length_mm, fill = island, col = island))+
  geom_density(alpha = 0.4)+
  geom_rug()+
  scale_fill_manual(values = colores)+
  scale_color_manual(values = colores)

7 Dividir variables en paneles con facet_wrap() y facet_grid()

Ambas funciones son útiles cuando se desea organizar los gráficos con mas muchas variables. Aunque el resultado es similar, las diferecias entre ambas se ve reflejada en la siguiente figura:

tomado de: Wickham et al. ggplot2 book

tomado de: Wickham et al. ggplot2 book

7.1 Dividir paneles por una variable con facet_wrap()

facet_wrap() genera una cinta de paneles y la envuelve en 2d. Esto es útil si tienes una sola variable con muchos niveles y deseas organizar los gráficos en forma mas eficiente ya sea en una cuadricula o una sola cinta.

Puede controlar la forma en que la cinta se envuelve en una cuadrícula con ncol, nrow, controle cuántas columnas y filas (solo necesita establecer una). as.table controla si las facetas se presentan como una tabla (TRUE), con los valores más altos en la parte inferior derecha, o un gráfico ( FALSE), con los valores más altos en la parte superior derecha.

por ejemplo:

ggplot(penguins, aes(x = culmen_length_mm, y = body_mass_g, col = island))+
  geom_point()+
  #ajustar el numero de columnas con ncol
  facet_wrap(~ island, ncol = 1)

ggplot(penguins, aes(x = culmen_length_mm, y = body_mass_g, col = island))+
  geom_point()+
  #ajustar el numero de filas con nrow
  facet_wrap(~ island, nrow = 1)

7.2 Dividir paneles por dos variabels con facet_grid()

Por otro lado, facet_grid() forma una matriz de paneles definidos por variables de facetas de filas y columnas. Es más útil cuando tiene dos variables discretas y todas las combinaciones de las variables existen en los datos. La forma en que se despliegan los paneles esta definida por la formula establecida con ~

por ejemplo:

ggplot(penguins, aes(x = culmen_length_mm, y = body_mass_g, col = island))+
  geom_point()+
  facet_grid(sex ~ .)

Despliega los paneles por sexo

ggplot(penguins, aes(x = culmen_length_mm, y = body_mass_g, col = island))+
  geom_point()+
  facet_grid(. ~ island)

Despliega los paneles por isla

ggplot(penguins, aes(x = culmen_length_mm, y = body_mass_g, col = island))+
  geom_point()+
  facet_grid(sex ~ island)

Despliega la interacción sexo e isla

8 Unir dos o mas gráficos con patchwork

Actualmente existen diversos paquetes con los que es posible unir diverss gráficos generados con ggplot tales como:

Uno de los paquetes mas sencillos es patchwork el cual permite unir diversos gráficos usando una sintaxis simple. Por ejemplo:

@AllisonHorst

@AllisonHorst

# Grafico 1

library(patchwork)

fig1 <- ggplot(penguins, aes(x = culmen_length_mm, y = culmen_depth_mm, col = island))+
  geom_point()

# grafico 2
fig2 <- ggplot(penguins, aes(x = culmen_length_mm, y = body_mass_g, col = island))+
  geom_point()

fig3 <- ggplot(penguins, aes(x = culmen_length_mm, y = flipper_length_mm, col = island))+
  geom_point()


fig1 + fig2 + fig3

plot_all <- (fig1 | fig2) / fig3
plot_all

plot_all <- plot_all + plot_layout(guides = "collect")
plot_all

plot_all & theme_bw() 

plot_all

plot_all <- plot_all + plot_annotation(title = "Relación de la longitud del culmen",
                          tag_levels = "A", tag_suffix = ")")
plot_all

9 Exportar una gráfica con ggsave()

La función ggsave() permite exportar gráficos en diferentes formatos, tales como PNG, TIFF, SVG y PDF

Por default, ggsave exporta el úlitmo gráfico que se haya generado

ggsave("output/Plot_all_penguins.pdf", plot = plot_all, width = 180, height = 180, units = "mm")
ggsave("output/Plot_all_penguins.tiff", plot = plot_all, width = 180, height = 180, units = "mm", dpi = 300)

10 Ejercicios

Ejercicio1:

En una sola cadena, filtra los pokemon de 1ra y 2da generación y realiza un gráfico de barras con la frecuencia de cada tipo (Type1) separando cada generación en un panel (facet) diferente

pokemon <- readxl::read_xls("data/datasets_pokemon.xls", sheet = "pokemon")

pokemon %>% 
  filter(Generation %in% c(1,2)) %>% 
ggplot(., aes(x = Type1))+
  geom_bar() +
  facet_wrap(~Generation, ncol = 1)

Ejercicio 2

Con ayuda de patchwork, une dos gráficas donde se muestre la relación entre el nivel de ataque (Attack) y defensa (Defense) entre los pokemon legendario y los no legendario. Añade un titulo, cambia las etiquetas de los ejes a español y agregales letras A) y B). Guarda esta gráfica como pdf

nolegend <- ggplot(pokemon %>% 
                     filter(Legendary == "FALSE"), aes(x = Attack, y = Defense))+
  geom_point(col = "darkblue")


legendary <- ggplot(pokemon %>% 
                     filter(Legendary == "TRUE"), aes(x = Attack, y = Defense))+
  geom_point(col = "salmon")


plot_all_e2 <- legendary + nolegend & labs(x = "Ataque", y = "Defensa") & theme_classic()

plot_all_e2 <- plot_all_e2 + 
  plot_annotation(title = "Relación de defensa y ataque en pokemon A) legendarios y B) no legendario",tag_levels = "A", tag_suffix = ")") 


plot_all_e2

ggsave("output/graficos/Ejercicio_ggplot2.pdf",plot_all_e2, width = 160, height = 120, units = "mm", scale = 1.5)

Ejercicio 2

En una sola cadea, filtra a los pokemon de tipo1 agua (Water), fuego (Fire), planta (Grass) y roca (Rock); Genera un gráfico de densidad del valor de ataque especial (Sp_Atk) con un color diferente para cada tipo; grafica en paneles diferentes cada tipo y si son legendarios (gradilla de 2 x 4). Finalmente, cambia la paleta de colores y el tema del grafico a tu gusto.

colores <- viridisLite::cividis(4)
pokemon %>% 
  filter(Type1 %in% c("Fire", "Water", "Grass", "Rock")) %>% 
  ggplot(., aes(Sp_Atk, fill = Type1)) +
  geom_density() +
  scale_fill_manual(values = colores) +
  facet_grid(Legendary ~ Type1)+
  theme_light()


sessionInfo()
R version 4.0.5 (2021-03-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19043)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] patchwork_1.1.1 forcats_0.5.1   stringr_1.4.0   dplyr_1.0.5    
 [5] purrr_0.3.4     readr_1.4.0     tidyr_1.1.3     tibble_3.0.4   
 [9] ggplot2_3.3.5   tidyverse_1.3.1 workflowr_1.6.2

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.5        lattice_0.20-41   lubridate_1.7.10  ps_1.5.0         
 [5] assertthat_0.2.1  rprojroot_2.0.2   digest_0.6.27     utf8_1.2.1       
 [9] R6_2.5.0          cellranger_1.1.0  backports_1.2.1   reprex_2.0.0     
[13] evaluate_0.14     httr_1.4.2        highr_0.8         pillar_1.6.0     
[17] rlang_0.4.11      readxl_1.3.1      rstudioapi_0.13   whisker_0.4      
[21] jquerylib_0.1.4   Matrix_1.3-2      rmarkdown_2.9     splines_4.0.5    
[25] labeling_0.4.2    munsell_0.5.0     broom_0.7.6       compiler_4.0.5   
[29] httpuv_1.5.4      modelr_0.1.8      xfun_0.23         pkgconfig_2.0.3  
[33] mgcv_1.8-33       htmltools_0.5.1.1 tidyselect_1.1.1  fansi_0.4.2      
[37] crayon_1.4.1      dbplyr_2.1.1      withr_2.4.2       later_1.1.0.1    
[41] grid_4.0.5        nlme_3.1-152      jsonlite_1.7.2    gtable_0.3.0     
[45] lifecycle_1.0.0   DBI_1.1.0         git2r_0.27.1      magrittr_2.0.1   
[49] scales_1.1.1      cli_2.5.0         stringi_1.5.3     farver_2.0.3     
[53] fs_1.5.0          promises_1.1.1    xml2_1.3.2        bslib_0.2.5.1    
[57] ellipsis_0.3.1    generics_0.1.0    vctrs_0.3.8       tools_4.0.5      
[61] glue_1.4.2        hms_1.0.0         yaml_2.2.1        colorspace_2.0-0 
[65] rvest_1.0.0       knitr_1.30        haven_2.3.1       sass_0.4.0