class: inverse, center, middle <br> #### Programación y manejo de datos con R (Slides 06-C) ## Gráficos con ggplot2 (C): Tipos de gráficos <br> ### Pedro J. Pérez #### 2020, septiembre ###### (actualizadas el 04-09-2023) <br><br> #### e-mail: [pedro.j.perez@uv.es](mailto:pedro.j.perez@uv.es) #### Web del curso: [https://perezp44.github.io/intro-ds-23-24-web](https://perezp44.github.io/intro-ds-23-24-web) --- class: inverse, center, middle background-image: url(imagenes/ss_06_img_01_ggplot2-hex.png) background-position: 95% 5% background-size: 10% ## 6. Distintos tipos de gráficos <html><div style='float:left'></div><hr color='#EB811B' size=1px width=796px></html> #### Mientrás entendiamos el funcionamiento de ggplot2 nos centramos en un sólo tipo de gráfico: los gráficos de puntos. #### Ahora veremos distintos tipos de gráficos: histogramas, scatter plots, gráficos de cajas, de barras, de lineas etc... etc... --- ##### Galerías con ejemplos En estas slides presentaremos ejemplos de algunos de los gráficos más utilizados en el análisis de datos. Puedes ver listados más completos en: - [[R-graph gallery]](https://www.r-graph-gallery.com/): Impresionante!! - [[Top 50 ggplot2 Visualizations (With Full R Code)]](http://r-statistics.co/Top50-Ggplot2-Visualizations-MasterList-R-Code.html):de r-statistics.co, más básico pero muy didáctico. - [[Extensiones ggplot2]](https://exts.ggplot2.tidyverse.org/): Impresionante!! - [[R-graph gallery - ggplot2 package]](http://r-graph-gallery.com/ggplot2-package.html): otra vez, impresionante!! <br> Evidentemente, **el tipo de grafico se ha de elegir en función de la información que se quiere mostrar**. [[Aquí]](https://coolinfographics.com/dataviz-guides) puedes encontrar ayuda para elegir el tipo de grafico. Por ejemplo: [[The Data Visualisation Catalogue]](https://datavizcatalogue.com/), [[The chart chooser]](https://extremepresentation.com/design/7-charts/), [[The Chart Chooser Dissected]](https://blog.qlik.com/third-pillar-of-mapping-data-to-visualizations-usage), [[The Chart Chooser: Interactive Version]](http://labs.juiceanalytics.com/chartchooser/index.html), etc ... --- class: inverse, center, middle background-image: url(imagenes/ss_06_img_01_ggplot2-hex.png) background-position: 95% 5% background-size: 7% ### 6.1 Histogramas <html><div style='float:left'></div><hr color='#EB811B' size=1px width=796px></html> #### Se utilizan para mostrar la distribución de UNA variable continua, por ejemplo la longitud del sépalo (Sepal.Length). <br> <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/unnamed-chunk-4-1.png" width="45%" style="display: block; margin: auto;" /> --- count: false ##### 6.1 Histogramas con geom_histogram() .panel1-grafico-15-auto[ ```r *ggplot(iris, aes(Sepal.Length)) ``` ] .panel2-grafico-15-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-15_auto_01_output-1.png" width="95%" style="display: block; margin: auto;" /> ] --- count: false ##### 6.1 Histogramas con geom_histogram() .panel1-grafico-15-auto[ ```r ggplot(iris, aes(Sepal.Length)) + *geom_histogram(bins = 60) + labs(title = "60 intervalos (o bins)") ``` ] .panel2-grafico-15-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-15_auto_02_output-1.png" width="95%" style="display: block; margin: auto;" /> ] --- count: false ##### 6.1 Histogramas con geom_histogram() .panel1-grafico-15-auto[ ```r ggplot(iris, aes(Sepal.Length)) + geom_histogram(bins = 60) + labs(title = "60 intervalos (o bins)") + *geom_histogram(bins = 40) + labs(title = "40 intervalos") ``` ] .panel2-grafico-15-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-15_auto_03_output-1.png" width="95%" style="display: block; margin: auto;" /> ] --- count: false ##### 6.1 Histogramas con geom_histogram() .panel1-grafico-15-auto[ ```r ggplot(iris, aes(Sepal.Length)) + geom_histogram(bins = 60) + labs(title = "60 intervalos (o bins)") + geom_histogram(bins = 40) + labs(title = "40 intervalos") + *geom_histogram(binwidth = 0.5) + labs(title = "En lugar de elegir el nº de intervalos, \n se puede elegir la anchura del intervalo: \n binwidth = 0.5") ``` ] .panel2-grafico-15-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-15_auto_04_output-1.png" width="95%" style="display: block; margin: auto;" /> ] --- count: false ##### 6.1 Histogramas con geom_histogram() .panel1-grafico-15-auto[ ```r ggplot(iris, aes(Sepal.Length)) + geom_histogram(bins = 60) + labs(title = "60 intervalos (o bins)") + geom_histogram(bins = 40) + labs(title = "40 intervalos") + geom_histogram(binwidth = 0.5) + labs(title = "En lugar de elegir el nº de intervalos, \n se puede elegir la anchura del intervalo: \n binwidth = 0.5") + *geom_histogram(binwidth = 0.5, * color = "black", * fill = "tomato") + labs(title = "binwidth = 0.5, color = black, fill = tomato") ``` ] .panel2-grafico-15-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-15_auto_05_output-1.png" width="95%" style="display: block; margin: auto;" /> ] --- count: false ##### 6.1 Histogramas con geom_histogram() .panel1-grafico-15-auto[ ```r ggplot(iris, aes(Sepal.Length)) + geom_histogram(bins = 60) + labs(title = "60 intervalos (o bins)") + geom_histogram(bins = 40) + labs(title = "40 intervalos") + geom_histogram(binwidth = 0.5) + labs(title = "En lugar de elegir el nº de intervalos, \n se puede elegir la anchura del intervalo: \n binwidth = 0.5") + geom_histogram(binwidth = 0.5, color = "black", fill = "tomato") + labs(title = "binwidth = 0.5, color = black, fill = tomato") + *geom_histogram(binwidth = 0.5, * aes(fill = Species), * color = "black") + labs(title = "binwidth = 0.5, color = black, aes(fill = Species)") ``` ] .panel2-grafico-15-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-15_auto_06_output-1.png" width="95%" style="display: block; margin: auto;" /> ] --- count: false ##### 6.1 Histogramas con geom_histogram() .panel1-grafico-15-auto[ ```r ggplot(iris, aes(Sepal.Length)) + geom_histogram(bins = 60) + labs(title = "60 intervalos (o bins)") + geom_histogram(bins = 40) + labs(title = "40 intervalos") + geom_histogram(binwidth = 0.5) + labs(title = "En lugar de elegir el nº de intervalos, \n se puede elegir la anchura del intervalo: \n binwidth = 0.5") + geom_histogram(binwidth = 0.5, color = "black", fill = "tomato") + labs(title = "binwidth = 0.5, color = black, fill = tomato") + geom_histogram(binwidth = 0.5, aes(fill = Species), color = "black") + labs(title = "binwidth = 0.5, color = black, aes(fill = Species)") + *facet_grid(cols = vars(Species)) ``` ] .panel2-grafico-15-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-15_auto_07_output-1.png" width="95%" style="display: block; margin: auto;" /> ] <style> .panel1-grafico-15-auto { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-grafico-15-auto { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-grafico-15-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- ##### 6.1 geom_density() y Joy Division plots ```r ggplot(iris, aes(Sepal.Length, fill = Species)) + geom_density(position = "stack", alpha = 0.5) ggplot(iris, aes(x = Sepal.Length, y = Species)) + ggridges::geom_density_ridges(aes(fill = Species), alpha = 0.5) ``` <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/unnamed-chunk-6-1.png" width="85%" style="display: block; margin: auto;" /> --- count: false ##### 6.3 Gráficos de caja (Boxplots) .panel1-grafico-16-auto[ ```r *ggplot(iris, aes(x = Species, y = Sepal.Length)) ``` ] .panel2-grafico-16-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-16_auto_01_output-1.png" width="95%" style="display: block; margin: auto;" /> ] --- count: false ##### 6.3 Gráficos de caja (Boxplots) .panel1-grafico-16-auto[ ```r ggplot(iris, aes(x = Species, y = Sepal.Length)) + *geom_boxplot() ``` ] .panel2-grafico-16-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-16_auto_02_output-1.png" width="95%" style="display: block; margin: auto;" /> ] --- count: false ##### 6.3 Gráficos de caja (Boxplots) .panel1-grafico-16-auto[ ```r ggplot(iris, aes(x = Species, y = Sepal.Length)) + geom_boxplot() + *geom_boxplot(aes(fill = Species), * outlier.colour = "purple") ``` ] .panel2-grafico-16-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-16_auto_03_output-1.png" width="95%" style="display: block; margin: auto;" /> ] --- count: false ##### 6.3 Gráficos de caja (Boxplots) .panel1-grafico-16-auto[ ```r ggplot(iris, aes(x = Species, y = Sepal.Length)) + geom_boxplot() + geom_boxplot(aes(fill = Species), outlier.colour = "purple") + *geom_jitter(width = 0.15, alpha = 1/4, color = "tomato") ``` ] .panel2-grafico-16-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-16_auto_04_output-1.png" width="95%" style="display: block; margin: auto;" /> ] --- count: false ##### 6.3 Gráficos de caja (Boxplots) .panel1-grafico-16-auto[ ```r ggplot(iris, aes(x = Species, y = Sepal.Length)) + geom_boxplot() + geom_boxplot(aes(fill = Species), outlier.colour = "purple") + geom_jitter(width = 0.15, alpha = 1/4, color = "tomato") + *stat_summary(fun = "mean", geom = "point", color = "purple", size = 2.5) ``` ] .panel2-grafico-16-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-16_auto_05_output-1.png" width="95%" style="display: block; margin: auto;" /> ] --- count: false ##### 6.3 Gráficos de caja (Boxplots) .panel1-grafico-16-auto[ ```r ggplot(iris, aes(x = Species, y = Sepal.Length)) + geom_boxplot() + geom_boxplot(aes(fill = Species), outlier.colour = "purple") + geom_jitter(width = 0.15, alpha = 1/4, color = "tomato") + stat_summary(fun = "mean", geom = "point", color = "purple", size = 2.5) + *geom_violin(aes(fill = Species), alpha = 0.6) ``` ] .panel2-grafico-16-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-16_auto_06_output-1.png" width="95%" style="display: block; margin: auto;" /> ] --- count: false ##### 6.3 Gráficos de caja (Boxplots) .panel1-grafico-16-auto[ ```r ggplot(iris, aes(x = Species, y = Sepal.Length)) + geom_boxplot() + geom_boxplot(aes(fill = Species), outlier.colour = "purple") + geom_jitter(width = 0.15, alpha = 1/4, color = "tomato") + stat_summary(fun = "mean", geom = "point", color = "purple", size = 2.5) + geom_violin(aes(fill = Species), alpha = 0.6) + *coord_flip() ``` ] .panel2-grafico-16-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-16_auto_07_output-1.png" width="95%" style="display: block; margin: auto;" /> ] <style> .panel1-grafico-16-auto { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-grafico-16-auto { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-grafico-16-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- count: false ##### 6.4 Gráficos de barra (Boxplots) .panel1-grafico-17-auto[ ```r *ggplot(mpg, aes(class)) ``` ] .panel2-grafico-17-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-17_auto_01_output-1.png" width="95%" style="display: block; margin: auto;" /> ] --- count: false ##### 6.4 Gráficos de barra (Boxplots) .panel1-grafico-17-auto[ ```r ggplot(mpg, aes(class)) + *geom_bar() ``` ] .panel2-grafico-17-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-17_auto_02_output-1.png" width="95%" style="display: block; margin: auto;" /> ] --- count: false ##### 6.4 Gráficos de barra (Boxplots) .panel1-grafico-17-auto[ ```r ggplot(mpg, aes(class)) + geom_bar() + *geom_bar(fill = "steelblue") ``` ] .panel2-grafico-17-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-17_auto_03_output-1.png" width="95%" style="display: block; margin: auto;" /> ] --- count: false ##### 6.4 Gráficos de barra (Boxplots) .panel1-grafico-17-auto[ ```r ggplot(mpg, aes(class)) + geom_bar() + geom_bar(fill = "steelblue") + *coord_flip() ``` ] .panel2-grafico-17-auto[ <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/grafico-17_auto_04_output-1.png" width="95%" style="display: block; margin: auto;" /> ] <style> .panel1-grafico-17-auto { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-grafico-17-auto { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-grafico-17-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- ##### 6.4 Gráficos de barra (Boxplots): distintas posiciones para las barras Para esta subsección utilizaremos el data.frame `mtcars` ```r p <- ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) p + geom_bar() p + geom_bar(position = "fill") p + geom_bar(position = "dodge") p + geom_bar(position = position_dodge2(preserve = "single")) ``` <img src="data:image/png;base64,#slides_06_ggplot2_C_files/figure-html/unnamed-chunk-8-1.png" width="98%" style="display: block; margin: auto;" /> --- class: inverse, center, middle ## 9. Gráficos interactivos <html><div style='float:left'></div><hr color='#EB811B' size=1px width=796px></html> Permiten al usuario interactuar con el gráfico, abriéndose posibilidades como: zooming, highlight, o mostrar información adicional al pinchar en algún elemento del gráfico, etc … --- ##### 9. Gráficos interactivos - Los gráficos interactivos permiten al usuario interactuar con el gráfico. - En general, JavaScript (JS) es el lenguaje utilizado para hacer gráficos interactivos con librerías como D3, Chart, Plotly, Vis Highcharts, … - Recientemente, el paquete de R htmlwidgets ha facilitado el uso de las librerías de JS en R. - Actualmente, paquetes de R, como leaflet, DT, dygraphs, networkD3 y muchos otros, utilizan el framework propuesto por htmlwidgets para hacer disponibles los gráficos interactivos de JS en R. [[Aquí]](http://gallery.htmlwidgets.org/) puede ver los pkgs que usar htmlwidgets - [[Aquí]](https://www.r-graph-gallery.com/interactive-charts.html) puedes ver una galería con ejemplos. --- ##### 9. Gráficos interactivos (**plotly**) - Un bookdown sobre plotly: <https://plotly-r.com/preface.html> ```r library(plotly) p <- ggplot(iris, aes(Sepal.Length, Petal.Length, color = Species)) + geom_point() + geom_smooth() ggplotly(p) ```
--- ##### 9. Gráficos interactivos (**plotly**) ```r p1 <- p + facet_grid(cols = vars(Species)) ggplotly(p1) ```