VIZ de datos con ggplot y Rmarkdown

Tema: Gráfico de Barras

Author

Danny Murillo González - UTP - CIDITIC

1 Requisitos

1.1 Cargar librerias

Librerias necesarias para el curso. Se deben haber instalado los paquetes previament con install.packages(nombre del paquete).

library(tidyverse) # incluye ggplot2
library(readxl) # funciones para importar xlsx
library(janitor) # funciones de limpieza
library(patchwork) #combinar gráficos de ggplot
library(ggExtra)
library(ggthemes) # nuevas temas para los
library(plotly) #gráficos interactivos # remotes::install_github("plotly/plotly")
library(tibble)
library(skimr) # reseumen numerico
library(modeest)
library(ggrepel) # añadir etiquetas a los gráficos
library(RColorBrewer) #paletas de colores
library(plotly) #graficos interactivos

1.2 Carga de datos

Se utilizará los datos de estudio de lectura y matematica de las escuelas de Miami en 2012 y 2013 por grado y Distrito llamado SchoolsMiamiDade.

Significado de las variables:

SchoolName : Nombre de la Escuela
BoardDistrict : Número de Dsitrito donde esta la escuela
SchoolGrade : Grado al que se le aplico la prueba
Reading2012 : puntaje de 1 a 100 en Lectura 2012
Reading2013: puntaje de 1 a 100 en Lectura 2013
ReadingDifference: diferencia entre 2013 y 2012 en lectura
Math2012: puntaje de 1 a 100 en Matemática 2012
Math2013: puntaje de 1 a 100 en Matemática 2013
MathDifference: diferencia entre 2013 y 2012 en matemática

datos_pinguinos_clean <- read.csv("data/data_penguins_clean.csv")
datos_pinguinos_clean <- as_tibble(datos_pinguinos_clean)
datos_pinguinos_clean<- datos_pinguinos_clean[,-1]
head(datos_pinguinos_clean,5)
# A tibble: 5 × 7
  species island    bill_lenght bill_depth flipper_lenght sex    body_mass_g
  <chr>   <chr>           <dbl>      <dbl>          <int> <chr>        <int>
1 Adelie  Torgersen        39.1       18.7            181 male          3750
2 Adelie  Torgersen        39.5       17.4            186 female        3800
3 Adelie  Torgersen        40.3       18              195 female        3250
4 Adelie  Torgersen        36.7       19.3            193 female        3450
5 Adelie  Torgersen        39.3       20.6            190 male          3650
# Transformar variables de tipo caracter a factor
datos_pinguinos_clean$species <- as.factor(datos_pinguinos_clean$species)
datos_pinguinos_clean$island<- as.factor(datos_pinguinos_clean$island)
datos_pinguinos_clean$sex<- as.factor(datos_pinguinos_clean$sex)

# Verificar tipos de datos
datos_pinguinos_clean |> 
  glimpse()
Rows: 333
Columns: 7
$ species        <fct> Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adelie,…
$ island         <fct> Torgersen, Torgersen, Torgersen, Torgersen, Torgersen, …
$ bill_lenght    <dbl> 39.1, 39.5, 40.3, 36.7, 39.3, 38.9, 39.2, 41.1, 38.6, 3…
$ bill_depth     <dbl> 18.7, 17.4, 18.0, 19.3, 20.6, 17.8, 19.6, 17.6, 21.2, 2…
$ flipper_lenght <int> 181, 186, 195, 193, 190, 181, 195, 182, 191, 198, 185, …
$ sex            <fct> male, female, female, female, male, female, male, femal…
$ body_mass_g    <int> 3750, 3800, 3250, 3450, 3650, 3625, 4675, 3200, 3800, 4…

2 Gráfico de barra

Conocido como gráfico de barras o gráfico de columnas, muestra las frecuencias absolutas y relativas en un sistema de coordenadas de dos ejes.Es utilizado para mostrar comparaciones numéricas discretas entre categorías, por lo tanto se utiliza como base una variable categórica. Un eje del gráfico muestra las categorías específicas que se están comparando y el otro eje representa una escala de valores discretos.
Hay que mencionar que aunque utilizamos como sinónimo los gráficos de barras y columnas, un gráfico de columna es un gráfico con barras verticales y un gráfico de barras son gráficos en posición horizontal.

2.1 Gráfico de barra en R

Para crear un gráfico de barra en ggplot utilizamos la geometría geom_bar() donde la estética aes() debe ser una variable categórica, como en este caso las variables species, island, sex del tibble datos_pinguinos_clean.
Lo que hace ggplot, es agrupar el número de observaciones por cada categoría y el valor calculado corresponde al ancho o alto de la barra.

#Gráfico de barras de numero de observaciones por especies 
datos_pinguinos_clean |> 
  ggplot(aes(x=species)) +
  geom_bar()

#Gráfico de barras de numero de observaciones por isla 
datos_pinguinos_clean |> 
  ggplot(aes(x=island)) +
  geom_bar()

#Gráfico de barras de numero de observaciones por sexo
datos_pinguinos_clean |>
  ggplot(aes(x=sex)) +
  geom_bar()

2.2 Gráfico de columnas

Ggplot utiliza otra geometría para crear gráficos de columnas, la cual es geom_col(), sin embargo, su funcionamiento es un poco diferente ya que esta utiliza un valor categórico y un valor numérico para crear las columnas el cual debe ser calculado. Este gráfico tambien permite transformar un gráfico de barras o más bien girar el gráfico.

# Crear datos de conteo de observaciones por categoria
conteo <- datos_pinguinos_clean |> 
  count(species)
# Crear gráfico de columnas
conteo |> 
  ggplot(aes(x=species, y=n)) +
  geom_col()

# Girar Gráfico 
conteo |> 
  ggplot(aes(y=species, x=n)) +
  geom_col() 

2.3 Insertar etiquetas de datos en el gráfico

Para añadir texto con los datos en cada columna se debe añadir la capa geom_text(aes(label = after_stat(count)),stat = “count”).

# Observaciones por especies

datos_pinguinos_clean |> 
  ggplot(aes(species)) +
  geom_bar()+
  geom_text(
    aes(label = after_stat(count)),
    stat = "count"
  )

# Modificar posición de los numeros en capa vertical
# vjust = 0.0 (coloca el text por encima de la barra)
#  vjust = -1.0 (valores positivos para bajar texto, negativos para subir)

 datos_pinguinos_clean |> 
  ggplot(aes(species)) +
  geom_bar()+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count" ,  
    vjust = -1.0
  )

# modificar color del texto de etiqueta de datos
 datos_pinguinos_clean |> 
  ggplot(aes(species)) +
  geom_bar()+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count" ,  
    vjust = -1.0,
    colour="#a62749"
  )

2.4 Modificar colores de las barras del gráfico

Se utiliza la propiedad fill en las propiedad de aes(fill= “#color” / variable) para añadir color, se puede utilizar un solo color o asignar el color según categoría species.

# Uno solo color en las barras

 datos_pinguinos_clean |> 
  ggplot(aes(species,)) +
  geom_bar(fill="#a62749")+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count" ,  
    vjust = -1.0,
    colour="#a62749"
  )

#Colores  en las barras según categorias
# Se crea una leyenda de los colores de la categoria
 datos_pinguinos_clean |> 
  ggplot(aes(species,fill=species)) +
  geom_bar()+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count" ,  
    vjust = -1.0,
    colour="#a62749"
  )

2.5 Modificar Posición de la leyenda de categorias

Se utiliza la capa de theme() y la propiedad legend.position, con los valores “none”, “left”, “right”, “top”, “bottom”. Al mover la leyenda, el titulo de la leyenda no aporta nada, ya que los colores y el eje x describen la categoria, para eliminar el titulo de la leyenda debemos recordar que la leyenda se genera de la propiedad fill, paar eliminarla utilizamos labs(fill=““).

#Modificar la posición de la leyenda
 datos_pinguinos_clean |> 
  ggplot(aes(species,fill=species)) +
  geom_bar()+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count" ,  
    vjust = -1.0,
    colour="#a62749"
  )+
  theme(legend.position = "bottom")+
  labs(fill="") 

2.6 Modificar las coordenadas de los ejes

en el gráfico de ejemplo, los valores encima de las barras se cortan debido a que las etiquetas de los datos están por encima del valor del eje y. Para modificar las coordenadas X y/o Y en el gráfico se puede utilizar la capa de coordenadas coord_cartesian(ylim=c(0,650)). Se se desea modificar el eje x entonces se utilizaría coord_cartesian(xlim=c(0,100)) pero en este tipo de gráfico no es necesario. En el e

#Se modifica la coordenada "Y" con los valores de 0 a 650  en un vector atómico
 datos_pinguinos_clean |> 
  ggplot(aes(species,fill=species)) +
  geom_bar()+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count" ,  
    vjust = -1.0,
    colour="#a62749"
  )+
  theme(legend.position = "bottom")+
  labs(fill="") +
  coord_cartesian(ylim=c(0,650))

#Se modifica la coordenada "Y" con los valores de 0 a 160  en un vector atómico
 datos_pinguinos_clean |> 
  ggplot(aes(species,fill=species)) +
  geom_bar()+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count" ,  
    vjust = -1.0,
    colour="#a62749"
  )+
  theme(legend.position = "bottom")+
   labs(fill="") +
  coord_cartesian(ylim=c(0,160))

2.7 Ordenar barras por tamaño

Para ordenar las barras debemos utilizar la función fct_infreq()) en la estetica aes() que contiene la variable especies.

#Se modifica la coordenada "Y" con los valores de 0 a 620  en un vector atómico
 datos_pinguinos_clean |> 
  ggplot(aes(fct_infreq(species),
             fill=species)) +
  geom_bar()+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count" ,  
    vjust = -1.0,
    colour="#a62749"
  )+
  theme(legend.position = "bottom")+
   labs(fill="") +
  coord_cartesian(ylim=c(0,160))

Invertir orden de las barras Para invertir el orden de las barras debemos utilizar la función fct_rev() en la estetica aes() que contiene la variable especies tomando en cuenta la función fct_infreq() que ordena el gráfico. Estas funciones de ordenamiento solo ordenan variables categoricas o de tipo factor.

#Se modifica la coordenada "Y" con los valores de 0 a 620  en un vector atómico
 datos_pinguinos_clean |> 
  ggplot(aes(fct_rev(fct_infreq(species)),
             fill=species)) +
  geom_bar()+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count" ,  
    vjust = -1.0,
    colour="#a62749"
  )+
  theme(legend.position = "bottom")+
  labs(fill="") +
  coord_cartesian(ylim=c(0,160))

2.8 Modificar nombre de los ejes

Para modificar el nombre de los ejes debemos utilizar la fucnión lab() e incluir los valores x / y a modificar de la siguiente forma labs(x=“Especies”, y=“Cantidad”).

#Se modifica la coordenada "Y" con los valores de 0 a 620  en un vector atómico
 datos_pinguinos_clean |> 
  ggplot(aes(fct_rev(fct_infreq(species)),
             fill=species)) +
  geom_bar()+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count" ,  
    vjust = -1.0,
    colour="#a62749"
  )+
  theme(legend.position = "bottom")+
  labs(fill="", 
       x="Especies",
       y="Cantidad") +
  coord_cartesian(ylim=c(0,160))

3 Barras apiladas

Se puede utilizar dos variables categoricas en los gráficos de barras agrupando los datos por la estetica de color fill= variable categorica de esta forma se crearán las barras apiladas.

# Dos variables categoricas 
# species es la categoria en el eje x
# sex la categoria que apila las barras

datos_pinguinos_clean |>
  ggplot(aes(species, fill=sex)) +
  geom_bar()

# Dos variables categoricas 
# sex es la categoria en el eje x
# speciesla categoria que apila las barras
datos_pinguinos_clean |>
  ggplot(aes(sex, fill=species)) +
  geom_bar()

3.1 Etiqueta de datos en barras apiladas

Las barras apiladas tambien son conocidas como stack bar es por ello que al inseratr los datos en barras apiladas debemos cambiar su posición con position = position_stack(x,y) en la geoametria de texto.

#añadir capa geom_text()
# se insertan las etiquetas de datos , pero , no centralizadas
datos_pinguinos_clean |>
  ggplot(aes(species, fill=sex)) +
  geom_bar()+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count" 
  )

#para centrarlas se utiliza la propiedad position = position_stack(0.5, 0.0) dentro de goem_tex()
datos_pinguinos_clean |>
  ggplot(aes(species, fill=sex)) +
  geom_bar()+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count",
    position = position_stack(0.5, 0.0)
  )

3.2 Ordenar barras apiladas

Para ordenar las barras aipladas utilizamos tambien la función de ordenación fct_infreq() en las categoria del eje x species.

# Ordenar barras apiladas
datos_pinguinos_clean |>
  ggplot(aes(fct_infreq(species), fill=sex)) +
  geom_bar()+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count",
    position = position_stack(0.5, 0.0)
  )

3.3 Barras apiladas - datos relativos

Si queremos comparar las columnas con proporciones relativas, debemos añadir a la geometria la propiedad geom_bar(position = “fill”), con esto ggplot, modificará los valores de la porporción de datos de la variable sex en cada columna island.

datos_pinguinos_clean |>
  ggplot(aes(species, fill=sex)) +
  geom_bar(position = "fill")

3.4 Incluir texto de pie de gráfico de la fuente con caption=.

# titanic |>
#   ggplot(aes(Pclass, fill=Sex)) +
#   geom_bar() + 
#    geom_text(stat='count', aes(label=..count..), position = position_stack(0.5, 0.0)) +
#   guides(fill = guide_legend("Sexo")) +  #modificar leyenda
#   ylab("N° Pasajeros") + xlab("Numero de Clase")+   # etiquetas x / y
#   labs(title="Número de pasajeros por Clase",
#        subtitle="Datos del Titanic - 1912", caption = "Fuente: www,gist.github.com/michhar/ - titanic.csv") 

4 Barras No apiladas

Se debe utilizar en la geometria de la barra la position “Dodge” , geom_bar(position = “dodge”) para crear grafica de barras con dos categorias pero, no apiladas.

# grafico de dos variables categoricas agrupadas por color 
# Ordenar barras no apiladas
datos_pinguinos_clean |>
  ggplot(aes(fct_infreq(species), fill=sex)) +
  geom_bar(position = "dodge")

4.1 Modificar la position de la etiqueta de datos en barras no apiladas

Se debe cambiar la posicion de los datos de texto con position = position_dodge(1.0) en la geometria de texto. El 1.0 permite colocar los datos encima de cada barra. Para modificar la posición del texto en cada barra debemos ajusatarlo con vjust (posicion vertical) y hjust (posicion horizontal).

# Modificar posicion de la leyenda de datos con,  
# p

datos_pinguinos_clean |>
  ggplot(aes(fct_infreq(species), fill=sex)) +
  geom_bar(position = "dodge")+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count",
    position = position_dodge(1.0),
    vjust=-0.3, 
    hjust=0.5
  )

4.2 Girar gráfico completo

Para girar un gráfico completo utilizamos una nueva capa con la función coord_flip().
Solo giran las barras y las etiquetas. Las etiquetas de datos se le debe modificar su posición con vjust y hjust.

# Girar barras apiladas
datos_pinguinos_clean |>
  ggplot(aes(fct_infreq(species), fill=sex)) +
  geom_bar()+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count",
    position = position_stack(0.5, 0.0)
  )+
  coord_flip()

Giro de gráfico de barras no apiladas

# Girar barras no apiladas
# valores no ajustados
datos_pinguinos_clean |>
  ggplot(aes(fct_infreq(species), fill=sex)) +
  geom_bar(position = "dodge")+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count",
    position = position_dodge(1.0),
    vjust=-0.3, 
    hjust=0.5
  )+
  coord_flip()

Girar barras no apiladas - valores ajustados fuera de la barra

datos_pinguinos_clean |>
  ggplot(aes(fct_infreq(species), fill=sex)) +
  geom_bar(position = "dodge")+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count",
    position = position_dodge(1.0),
    vjust=0.5, 
    hjust=-0.3
  )+
  coord_flip()

Girar barras no apiladas - valores ajustados dentro de la barra

# Girar barras no apiladas
# valores ajustados dentro de la barra
datos_pinguinos_clean |>
  ggplot(aes(fct_infreq(species), fill=sex)) +
  geom_bar(position = "dodge")+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count",
    position = position_dodge(1.0),
    vjust=0.5, 
    hjust= 2.0
  )+
  coord_flip()

5 Recomendaciones

5.1 Recomendación 1

Muchas Categorias o etiquetas extensa

Los gráficos de barras son utilizamos con mayor frecuencia para generar ranking de una categoria o cuando el número de categorias es muy extenso. Para transformar las columnas a barras en ggplot, es necesario girar todo el gráfico utilizando coord_flip() o modificando el eje de la variable de X a Y.

inec <- read.csv("data/INEC-morbilidad-2023-10-14.csv")
inec <- as_tibble(inec)

#Gráfico de columnas con un número considerables de categorias
# No se logra leer bien las etiquetas
inec |>
  ggplot(aes(Region)) +
  geom_bar()

#Gráfico de columnas transformado en barras, girando el gráfico
# en este caso se logra leer bien las etiquetas
inec |>
  ggplot(aes(Region)) +
  geom_bar() +
  coord_flip()

# Modificando el eje de la variable Region
# el valor predeterminado es X, lo cambiamos por Y
inec |>
  ggplot(aes(y=Region)) +
  geom_bar() 

5.2 Recomendación 2

Ordenar barras o columnas
Cuando creamos un gráfio de barras o columnas están por naturaleza se ordenan según la categoría, principalmente en orden alfabético, sin embargo podemos modificar el orden de los datos según el conteo de los datos por categoria. Para ello podemos utiliza en la estetica aes() la función fct_infreq(variable categorica) paar ordenar los datos, estos se ordenarán de menor a mayor. Si deseamos invertir el orden , debemos utilizar la función fct_rev() que invierte el orden de las categorias, por lo que es importante utilizarlas combinadas fct_rev(fct_infreq(Region)).

Ordenar gráfico de barra de menor a mayor

inec |>
  ggplot(aes(fct_infreq(Region))) +
  geom_bar() +
  coord_flip()+
  labs(x="provincias")

Ordenar gráfico de barra de mayor a menor

inec |>
  ggplot(aes(fct_rev(fct_infreq(Region)))) +
  geom_bar() +
  coord_flip()+
  labs(x="provincias")

5.3 Recomendación 3

Qué aporta el color?
Una caracteristicas muy utilizada en los gráficos de barras o columnas, es colorear las barras, sin embargo, el color en la barra es una format de categorizar los datos en el gráfico, por lo que si este no es el fin del color al utilizarlo, mejor utilizar un solo color en todas las barras, ya que probablemente sean todos de uns misma categoria.

# varios colores en las barras
inec |>
  ggplot(aes(fct_rev(fct_infreq(Region)))) +
  geom_bar(aes(fill=Region)) +
  coord_flip()+
  labs(x="provincias")

# un solo color en las barras
inec |>
  ggplot(aes(fct_rev(fct_infreq(Region)))) +
  geom_bar(aes(fill="salmon")) +
  coord_flip()+
  labs(x="provincias")+
  guides(fill="none") # eliminar leyenda

5.4 Recomendación 4

Menos es más
Eliminar elementos que no aportan al gráfico como las leyendas de color, grillas y añadir valores, hacen del gráfico más simple pero con la información necesaria.

# un solo color en las barras
inec |>
  ggplot(aes(fct_rev(fct_infreq(Region)))) +
  geom_bar(aes(fill="salmon")) +
  coord_flip()+
  labs(x="provincias",
       y="cantidad")+
  guides(fill="none")+  # eliminar leyenda
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count",
    vjust=0.5, 
    hjust= 1.2,
    size=2.9
  )+
  theme_classic()

5.5 Recomendación 5

Énfasis en una barra
Eliminar elemntos que no aportan al gráfico como las leyendas de color, grillas y añadir valores, hacen del gráfico más simple pero con la información necesaria.

#El número de colores esta asociado al núemero de categorias
# En el caso de Región son 9 categorias
colores <- c("#636363","#636363", "#636363", "#636363" ,"#636363" ,"#636363" ,"#636363","#636363", "#636363")
colores[1] <- "#F26419"

# un solo color en las barras

data <- inec |> 
  count(Region) |> 
  arrange(desc(n))

data |>
  filter(n>1540) |> 
  ggplot(aes(x=Region, y=n)) +
  geom_col(fill=colores, color="#D9D9D9") +
  coord_flip()+
  labs(x="provincias",
       y="cantidad")+
  guides(fill="none")+  # eliminar leyenda
  theme_classic()

5.6 Reodernar barras - OP2

Otra forma de reordenar el gráfico de barras, es reordenar la variable categorica, esto se hace basado en que una variable categorica tipo factor contiene niveles levels de la forma en que esta ordenada la variable.

Gráfico de barra ordenado según Región (orden A-Z) Si creamos el gráfico, este ordena las barras en orden alfabetico de las categorias.

#Variable Región como factor
inec$Region <- as.factor(inec$Region)

#Niveles de los datos Region
levels(inec$Region)
 [1] "BOCAS DEL TORO" "C. NGOBE BUGLE" "CHIRIQUI"       "COCLE"         
 [5] "COLON"          "COM. KUNA YALA" "COM. NGOBE BUG" "DARIEN"        
 [9] "HERRERA"        "KUNA YALA"      "LOS SANTOS"     "PANAMA ESTE"   
[13] "PANAMA METRO"   "PANAMA NORTE"   "PANAMA OESTE"   "SAN MIGUELITO" 
[17] "VERAGUAS"      
# un solo color en las barras
data <- inec |> 
  count(Region) |> 
  arrange(desc(n))


# Crear gráfico 1
data |>
  ggplot(aes(x=Region, y=n)) +
  geom_col(fill="salmon") +
  coord_flip()+
  labs(x="provincias",
       y="cantidad")+
  guides(fill="none")+  # eliminar leyenda
  theme_classic()

Gráfico de barra ordenado según levels() de la variable Region
Si mostramos los datos del tibble data vemos que la variable Region no esta ordenada en orden alfabético sino por el valor de n, pero debemos inidcarle a esta variable tipo factor, que los valores levels de esa categoria deben tener el mismo orden del tibble data. Los datos del orden de la variable REgion la almacenaremos en un vector llamado ordenREgion.

# Imprimir tibble data 
# datos ordenados por el valro de n
data
# A tibble: 17 × 2
   Region             n
   <fct>          <int>
 1 PANAMA METRO    2090
 2 COCLE           2024
 3 CHIRIQUI        1914
 4 VERAGUAS        1848
 5 SAN MIGUELITO   1804
 6 PANAMA OESTE    1760
 7 HERRERA         1716
 8 LOS SANTOS      1716
 9 COLON           1606
10 BOCAS DEL TORO  1540
11 PANAMA ESTE     1474
12 DARIEN          1364
13 C. NGOBE BUGLE   792
14 KUNA YALA        792
15 PANAMA NORTE     638
16 COM. NGOBE BUG   594
17 COM. KUNA YALA   528
# Capturar datos del orden de la variable Region
# Region ordenado por valor de "n"
ordenRegion <- data$Region

# Ordenar niveles de variable categorica
data$Region<- factor(data$Region, 
                     levels = ordenRegion)

#Niveles ordenados según tibble
levels(data$Region)
 [1] "PANAMA METRO"   "COCLE"          "CHIRIQUI"       "VERAGUAS"      
 [5] "SAN MIGUELITO"  "PANAMA OESTE"   "HERRERA"        "LOS SANTOS"    
 [9] "COLON"          "BOCAS DEL TORO" "PANAMA ESTE"    "DARIEN"        
[13] "C. NGOBE BUGLE" "KUNA YALA"      "PANAMA NORTE"   "COM. NGOBE BUG"
[17] "COM. KUNA YALA"
# Crear gráfico 2
data |>
  ggplot(aes(x=Region, y=n)) +
  geom_col(fill="salmon") +
  coord_flip()+
  labs(x="provincias",
       y="cantidad")+
  guides(fill="none")+  # eliminar leyenda
  theme_classic()

Gráfico de barra en ordenado INVERTIDO según levels() de la variable Region
Para invertir el orden de los levels() de la variable región según orden del tibble data, debemos invertir los datos del vector ordenRegion utilizando la función rev().

# Capturar datos del orden de la variable Region
# Invertir orden de vector Región, de menor a mayor
ordenRegion <- rev(data$Region)
# Ordenar niveles de variable categorica
data$Region<- factor(data$Region, 
                     levels = ordenRegion)

#Niveles ordenados a la inversa
levels(data$Region)
 [1] "COM. KUNA YALA" "COM. NGOBE BUG" "PANAMA NORTE"   "KUNA YALA"     
 [5] "C. NGOBE BUGLE" "DARIEN"         "PANAMA ESTE"    "BOCAS DEL TORO"
 [9] "COLON"          "LOS SANTOS"     "HERRERA"        "PANAMA OESTE"  
[13] "SAN MIGUELITO"  "VERAGUAS"       "CHIRIQUI"       "COCLE"         
[17] "PANAMA METRO"  
# Crear gráfico 3
data |>
  ggplot(aes(x=Region, y=n)) +
  geom_col(fill="salmon") +
  coord_flip()+
  labs(x="provincias",
       y="cantidad")+
  guides(fill="none")+  # eliminar leyenda
  theme_classic()

6 Facetas

6.1 Facetas de gráficos por columnas

Podemos En este ejemplo, la pregunta esta relacionada a unir 3 variables categóricas, Survived, Sex y Pclass, sin embargo, solo se pueden utilizar dos variables categoricas para el gráfico de barras.
Lo que hacemos es integrar una nueva variable utilizando la capa de facetas utilizando facet_grid(variable), para separar los gráficos de sobrevivientes por sexo.

 datos_pinguinos_clean |> 
  ggplot(aes(fct_rev(fct_infreq(species)),
             fill=species)) +
  geom_bar()+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count" ,  
    vjust = -1.0,
    colour="#a62749"
  )+
  theme(legend.position = "bottom")+
  labs(fill="", 
       x="Especies",
       y="Cantidad") +
  # coord_cartesian(ylim=c(0,160))+
  facet_grid(.~sex)

6.2 Faceta de gráficos por filas

# Facetas de gráficos por columnas
 datos_pinguinos_clean |> 
  ggplot(aes(fct_rev(fct_infreq(species)),
             fill=species)) +
  geom_bar()+
  geom_text(
    aes(label = after_stat(count)
        ),
    stat = "count" ,  
    vjust = -1.0,
    colour="#a62749"
  )+
  theme(legend.position = "bottom")+
  labs(fill="", 
       x="Especies",
       y="Cantidad") +
  facet_grid(island~.)

7 Práctica

Crear gráfico de barras apiladas utilizando los datos de *data_penguins_clean.csv. Seguir los pasos de Crear gráfico de Pastel en R de este documento.
TIPS: En el gráfico debe hacer usos de la variables sex y especies con filter(condicion) donde body_mass_g>3200**.

Gráfico de resultado: