InicioGr谩ficosGr谩fico de sectores en R

Gr谩fico de sectores en R

Aprende a crear gr谩ficos de sectores en R base con la funci贸n pie

Un gr谩fico de sectores, tambi茅n conocido como gr谩fico circular, gr谩fico de pastel, de tarta, de torta o pie chart, por su nombre en ingl茅s, es un gr谩fico circular que representa proporciones o porcentajes en sectores, donde el 谩rea y la longitud del arco de cada sector es proporcional a la cantidad representada. Existen variaciones de de este tipo de gr谩fico, como los gr谩ficos de anillos, de donut, de waffles y gr谩ficos spie. En este tutorial revisaremos c贸mo hacer un gr谩fico de sectores en R base.

Cr铆tica a los gr谩ficos de sectores

Antes de proceder con las explicaciones, cabe mencionar que los gr谩ficos circulares, aunque muy populares, han sido ampliamente criticados. Como son m谩s dif铆ciles de leer que otras alternativas gr谩ficas, se sabe que son gr谩ficos estad铆sticos que pueden dar lugar a enga帽os. Los siguientes gr谩ficos representan las mismas variables dibujadas con gr谩ficos de sectores y con gr谩ficos de barras.

Critica a los gr谩ficos de sectores
Gr谩ficos de barras como alternativa a los gr谩ficos circulares

Como se puede ver en el ejemplo anterior, los gr谩ficos de barras son m谩s f谩ciles de leer que los gr谩ficos de sectores. No obstante, los gr谩ficos circulares pueden ser 煤tiles en muchas situaciones, por ejemplo, cuando los datos est谩n muy desbalanceados.

Los gr谩ficos de sectores han sido criticados debido a la dificultad que supone leer 谩ngulos para los ojos humanos. En la mayor铆a de casos se recomienda usar gr谩ficos de barras en su lugar, ya que son m谩s f谩ciles de leer.

驴C贸mo crear un gr谩fico de sectores R?

Un gr谩fico circular se puede crear con la funci贸n pie de R base. Aunque existen m谩s paquetes para crear gr谩ficos de sectores, como ggplot2, en este tutorial revisaremos c贸mo crear gr谩ficos de tarta con la funci贸n pie y la funci贸n PieChart del paquete lessR, para mostrar porcentajes.

La funci贸n pie()

La funci贸n pie permite crear gr谩ficos de sectore en R. Considera, por ejemplo, que quieres crear un gr谩fico circular de la siguiente variable, que representa el conteo de cierto evento:

count <- c(7, 25, 16, 12, 10, 30)

El c贸digo para crear un gr谩fico de sectores en R es como sigue. Ten en cuenta que puedes personalizar el tama帽o del gr谩fico (desde -1 a 1) con el argumento radius, que por defecto toma el valor 0.8.

pie(count)
La funci贸n pie en R

Tambi茅n puedes modificar la direcci贸n del gr谩fico con el argumento clockwise, que por defecto es FALSE.

pie(count, clockwise = TRUE)
Cambiar la direcci贸n de los sectores

Sin embargo, es posible que hayas notado que el gr谩fico no muestra el valor correspondiente de cada segmento. Para resolver este problema, puede pasar el vector al argumento labels de la siguiente manera.

pie(count, labels = count)
Cambiar etiquetas gr谩fico de sectores en R

Si lo prefieres, puedes agregar un vector de caracteres con los nombres que quieras para representar cada segmento:

pie(count, labels = c("0-15", "16-30", "31-45", "46-60", "61-75", "76-90"))
Gr谩fico de sectores con variables categ贸ricas

Personalizaci贸n

Adem谩s, puedes modificar el color del gr谩fico con el argumento col. En el siguiente bloque de c贸digo mostramos c贸mo usar diferentes paletas de colores. Ten en cuenta que el argumento cex permite modificar el tama帽o de las etiquetas.

par(mfrow = c(1, 3))

pie(count, labels = count, col = 1:6, cex = 2)
pie(count, labels = count, col = rainbow(6), cex = 2)
pie(count, labels = count, col = topo.colors(6), cex = 2)

par(mfrow = c(1, 1))
Cambiar colores a un pie chart en R

Sin embargo, la mejor paleta de colores para un gr谩fico de sectores pueden ser las de la funci贸n brewer.pal del paquete RColorBrewer.

# install.packages("RColorBrewer")
library(RColorBrewer)

color <- brewer.pal(length(count), "Set2") 

pie(count, labels = count, col = color)
Paleta de colores gr谩fico de sectores en R

Tambi茅n puedes especificar un vector de colores para el borde de cada porci贸n. Si quieres que el color sea igual al color del 谩rea, puedes escribir:

pie(count, labels = count, col = color, border = color)
Color del borde de los sectores de un gr谩fico circular en R

Si quieres modificar el tipo de l铆nea de los bordes del gr谩fico puedes hacer uso del argumento lty.

pie(count, labels = count, col = color, lty = 2)
Cambiar tipo de l铆nea de un gr谩fico de sectores en R

Adem谩s, puedes agregar l铆neas de sombreado con el argumento density. Cuanto mayor sea el valor, m谩s l铆neas se mostrar谩n. N贸tese que el argumento angle puede usarse para modificar el 谩ngulo de las l铆neas.

pie(count, labels = count, col = color, density = 50, angle = 45)
A帽adir sombreado con l铆neas a un gr谩fico de tarta

Finalmente, tambi茅n puedes personalizar el n煤mero de pol铆gonos utilizados para crear el gr谩fico. Por defecto, el argumento edges es 200, pero si especificas un valor m谩s bajo, puedes crear algo como lo siguiente:

pie(count, labels = count, edges = 10)
Gr谩fico de sectores no circular

Gr谩fico circular con porcentajes

Los gr谩ficos circulares son muy 煤tiles para mostrar porcentajes, pero la funci贸n pie no permite mostrarlos autom谩ticamente. Para mostrar porcentajes para el vector de muestra (ya que la suma de los elementos es igual a 100), puedes escribir:

pie(count, labels = paste0(count, "%"))
Gr谩fico sectores en R con porcentajes

No obstante, una aproximaci贸n m谩s gen茅rica es calcular los porcentajes correspondientes. Para ese prop贸sito, considera el siguiente vector:

count_2 <- c(15, 27, 25, 10)

Como en este caso la suma de los componentes del vector no es igual a 100, el porcentaje correspondiente es diferente al n煤mero correspondiente del vector. En el siguiente bloque de c贸digo mostramos c贸mo calcular los porcentajes. Ten en cuenta que la funci贸n round permite modificar el n煤mero de decimales.

etiquetas <- paste0(round(100 * count_2/sum(count_2), 2), "%")

pie(count_2, labels = etiquetas)
A帽adir porcentajes como etiquetas

Sin embargo, si tambi茅n quieres mostrar los n煤meros o las etiquetas del vector original, podr铆as escribir:

etiquetas <- paste0(count_2, " = ", round(100 * count_2/sum(count_2), 2), "%")
pie(count_2, labels = etiquetas)
Porcentajes y valores en las etiquetas

Una alternativa para mostrar porcentajes en un gr谩fico circular es usar la funci贸n PieChart del paquete lessR, que muestra los porcentajes en el medio de los sectores. Sin embargo, la entrada de esta funci贸n tiene que ser una variable categ贸rica (o num茅rica, si cada valor distinto representa una categor铆a, como en el ejemplo) de un data frame, en lugar de un vector num茅rico. Recuerda escribir ?PieChart o help(PieChart) para obtener informaci贸n adicional.

# install.packages("lessR)
library(lessR)

# Creamos el data frame con la nueva variable
mis_datos <- data.frame(x = c(rep(count_2[1], count_2[1]),  # 15 veces 15
                              rep(count_2[2], count_2[2]),  # 27 veces 27
                              rep(count_2[3], count_2[3]),  # 25 veces 25
                              rep(count_2[4], count_2[4]))) # 10 veces 10

PieChart(x, hole = 0, values = "%", data = mis_datos, fill = 1:4, main = "")
Funci贸n PieChart con porcentajes

Gr谩fico de sectores con variable categ贸rica

Considera, por ejemplo, que quieres crear un gr谩fico circular en R con el porcentaje correspondiente de hombres y mujeres registrados en alg煤n evento. Tienes los siguientes datos:

genero <- factor(c(rep("Hombre", 10), rep("Mujer", 20)))
genero
Hombre Hombre Hombre Hombre Hombre Hombre Hombre Hombre Hombre Hombre
Mujer  Mujer  Mujer  Mujer  Mujer  Mujer  Mujer  Mujer  Mujer  Mujer 
Mujer  Mujer  Mujer  Mujer  Mujer  Mujer  Mujer  Mujer  Mujer  Mujer 
Levels: Hombre Mujer

Por lo tanto, como tienes una variable de caracteres, puede usar la funci贸n table para contar el n煤mero de hombres y mujeres del vector de caracteres y pasar la salida a la funci贸n pie.

tabla_genero <- table(genero)

pie(tabla_genero)
Gr谩fico de sectores con variable categ贸rica

Una alternativa es utilizar la funci贸n PieChart, pero como se帽alamos antes, debes crear un data frame con una variable de caracteres o factor:

genero <- data.frame(gen = genero)

# install.packages("lessR")
library(lessR)

PieChart(gen, hole = 0, values = "%", data = genero,
         fill = c("lightblue", "pink"), main = "")
Funci贸n PieChart con variable categ贸rica

A帽adiendo una leyenda

Para crear un gr谩fico circular en R con leyenda, debes usar la funci贸n legend. Como ejemplo, si quieres mostrar una leyenda en la parte superior izquierda de la imagen, puedes ejecutar el siguiente c贸digo:

count_3 <- c(20, 50, 30)
# sum(count_3) # 100

pie(count_3, labels = paste0(count_3, "%"))

legend("topleft", legend = c("Teatro", "Series", "Cine"),
       fill =  c("white", "lightblue", "mistyrose"))
A帽adir leyenda al gr谩fico circular

Gr谩fico de sectores 3D

En esta 煤ltima secci贸n, aprender谩s a crear gr谩ficos circulares 3D en R. Para ello, deber谩s instalar el paquete plotrix, que contiene la funci贸n pie3D. El c贸digo para dibujar un gr谩fico de sectores 3D en R es el siguiente:

# install.packages("plotrix")
library(plotrix)

datos <- c(65, 35)

pie3D(datos)
Gr谩fico de sectores en 3D con la funci贸n pie3D
Tambi茅n puedes pasar una tabla como argumento para crear un gr谩fico circular 3D a partir de datos categ贸ricos.

Ten en cuenta que, de manera predeterminada, la funci贸n no muestra etiquetas, por lo que deber谩s indicarlas en el argumento labels.

pie3D(datos, labels = datos)
A帽adiendo etiquetas a un gr谩fiuco circular 3D en R

Adem谩s, puedes explotar los sectores del gr谩fico con el argumento explode.

pie3D(datos, labels = datos, explode = 0.25)
Gr谩fico de sectores 3D separado

Al igual que con otros gr谩ficos circulares, puedes personalizar varios par谩metros gr谩ficos del gr谩fico final, como los colores, los colores de las etiquetas o el color del borde, entre otros. Recuerda escribir help(pie3D) o ?pie3D para obtener detalles adicionales.

pie3D(datos, labels = datos, col = 2:3, labelcol = "red", border = "white")
Gr谩fico circular 3D personalizado con colores