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 en 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 sectores 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, puedes 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. Ten en cuenta 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áfico 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