Sistemas de coordenadas en ggplot2

Los sistemas de coordenadas en ggplot2 se pueden dividir en dos categorías: sistemas lineales (coord_cartesian, coord_fixed, coord_flip) y no lineales (coord_trans, coord_polar, coord_quickmap, coord_map). Estos sistemas se revisaran a lo largo de este tutorial.

Coordenadas cartesianas con coord_cartesian

Por defecto, los gráficos de ggplot2 tienen coordenadas cartesianas. Sin embargo, la función coord_cartesian es muy útil para hacer zoom a los gráficos, porque si usas scale_x_continuous o scale_y_continuous los datos subyacentes cambiarán y por tanto también lo harán las estadísticas calculadas, tal y como se muestra a continuación.

Coordenadas cartesianas por defecto

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

# Datos
set.seed(4)
df <- data.frame(x = rnorm(200),
                 y = rnorm(200))

p <- ggplot(df, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth()

p

Coordenadas por defecto en ggplot2

Usando scale_x_continuous para hacer zoom se modifican los datos y por tanto la estimación de la suavización.

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

# Datos
set.seed(4)
df <- data.frame(x = rnorm(200),
                 y = rnorm(200))

p <- ggplot(df, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth()

p + scale_x_continuous(limits = c(-1, 1))

Zoom en ggplot2 con scale_x_continuous

Sin embargo, si utilizas coord_cartesian puedes establecer los límites de los ejes con xlim e ylim sin modificar las estimaciones originales, tan solo haciendo zoom.

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

# Datos
set.seed(4)
df <- data.frame(x = rnorm(200),
                 y = rnorm(200))

p <- ggplot(df, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth()

p + coord_cartesian(xlim = c(-1, 1))

Zoom en ggplot2 con coord_cartesian

Coordenadas fijas (misma escala) con coord_fixed

La función coord_fixed es muy útil en caso de que quieras una relación de aspecto fija en tu gráfico a pesar del tamaño del dispositivo gráfico, esto es, una unidad a lo largo del eje X será la misma unidad a lo largo del eje Y.

Relación de aspecto fija en ggplot2 con coord_fixed

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

# Datos
set.seed(4)
df <- data.frame(x = rnorm(200),
                 y = rnorm(200))

p <- ggplot(df, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth()

p + coord_fixed()

Rotar los ejes con coord_flip

La función coord_flip permite rotar los ejes en ggplot2, de modo que si tienes un gráfico vertical puedes crear su versión horizontal y viceversa. Esto es especialmente útil en el caso de diagramas de cajas, gráficos de violín, …

Por defecto

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

# Datos
set.seed(4)
df <- data.frame(x = rnorm(200))

p <- ggplot(df, aes(x = x, y = "")) +
  geom_boxplot()

p

Orientación por defecto en ggplot2

Ejes rotados

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

# Datos
set.seed(4)
df <- data.frame(x = rnorm(200))

p <- ggplot(df, aes(x = x, y = "")) +
  geom_boxplot()

p + coord_flip()

Rotar los ejes en ggplot2 con coord_flip

Transformaciones con coord_trans

La función coord_trans crea sistemas sistemas de coordenadas cartesianas transformadas. Ten en cuenta que utilizar esta función no es lo mismo que transformar la escala, ya que cuando se usa coord_trans la transformación ocurre después de los cálculos estadísticos, afectando a la apariencia de los geoms. Considera el siguiente gráfico:

Transformación por defecto en ggplot2

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

# Datos
set.seed(4)
df <- data.frame(x = 1:100,
                 y = 1:100 + rnorm(200, sd = 10))

p <- ggplot(df, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(method = "lm")

p

En el siguiente ejemplo vamos a transformar el eje X (argumento x) con la función log, de modo que la estimación lineal se convertirá en una curva. Recuerda que puedes pasar cualquier función a los ejes siempre y cuando tenga sentido.

Transformación logarítimica del eje X en ggplot2 con la función coord_trans

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

# Datos
set.seed(4)
df <- data.frame(x = 1:100,
                 y = 1:100 + rnorm(200, sd = 10))

p <- ggplot(df, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(method = "lm")

p + coord_trans(x = "log")

Coordenadas polares con coord_polar

Las coordenadas polares se pueden aplicar utilizando coord_polar. Este tipo de coordinadas se usaan habitualmente para gráficos de sectores (que no son más que gráficos de barras apiladas en coordenadas polares), rosas de los vientos, gráficos de radar, gráficos bullseye, …

Ten en cuenta que por defecto el ángulo se mapea a la variable x, pero puedes establecer theta = "y" para mapear el ángulo a la variable y. También puedes modificar la dirección del gŕafico con el argumento direction (establece -1 para el sentido contrario a las agujas del reloj). Mira los ejemplos siguientes como aclaración.

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

# Datos
set.seed(4)
df <- data.frame(x = 1:10,
                 y = sample(1:10))

p <- ggplot(df, aes(x = x, y = y, fill = y)) +
  geom_bar(stat = "identity", color = "white",
           lwd = 1, show.legend = FALSE)

p + coord_polar()

La función coord_polar en ggplot2

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

# Datos
set.seed(4)
df <- data.frame(x = 1:10,
                 y = sample(1:10))

p <- ggplot(df, aes(x = x, y = y, fill = y)) +
  geom_bar(stat = "identity", color = "white",
           lwd = 1, show.legend = FALSE)

p + coord_polar(theta = "y")

Coordenadas polares en ggplot2 con coord_polar

Proyecciones de mapas con coord_quickmap y coord_map

El último sistema de coordenadas está relacionada con proyecciones de mapas. Tendrás que tener instalado el paquete mapproj en tu ordenadas para aplicar las proyecciones.

Por una parte, la función coord_map requiere un tiempo de computación considerablem pero aproximará la proyección lo máximo que sea posible. Ten en cuenta que existen muchas proyecciones diferentes disponibles. Escribe ?mapproj::mapproject para ver la lista completa.

Mapa del mundo por defecto en ggplot2

Mapa por defecto

# install.packages("ggplot2")
library(ggplot2)
# install.packages("mapproj")

p <- ggplot(map_data("world"),
            aes(long, lat, group = group)) +
      geom_polygon(fill = "white", colour = 1)

p

Proyección Mercator en ggplot2 con coord_map

Proyección Mercator

La proyección por defecto es la proyección Mercator. Ten en cuenta que hemos modificado los límites del eje X debido a que la función produce unas líneas horizontales no deseadas. Si quieres crear este gráfico utilizar coord_sf del paquete sf es una mejor opción.

# install.packages("ggplot2")
library(ggplot2)
# install.packages("mapproj")

p <- ggplot(map_data("world"),
            aes(long, lat, group = group)) +
      geom_polygon(fill = "white", colour = 1)

p + coord_map(xlim = c(-180, 180))
# p + sf::coord_sf() # Mejor opción

Proyección ortográfica en ggplot2

Proyección ortográfica

# install.packages("ggplot2")
library(ggplot2)
# install.packages("mapproj")

p <- ggplot(map_data("world"),
            aes(long, lat, group = group)) +
      geom_polygon(fill = "white", colour = 1)

p + coord_map("orthographic")

Proyección de ojo de pez en ggplot2

Ojo de pez

# install.packages("ggplot2")
library(ggplot2)
# install.packages("mapproj")

p <- ggplot(map_data("world"),
            aes(long, lat, group = group)) +
      geom_polygon(fill = "white", colour = 1)

p + coord_map("fisheye",
              n = 4) # Índice de refracción

Proyección sinusoidal en ggplot2

Sinusoidal

# install.packages("ggplot2")
library(ggplot2)
# install.packages("mapproj")

p <- ggplot(map_data("world"),
            aes(long, lat, group = group)) +
      geom_polygon(fill = "white", colour = 1)

p + coord_map("sinusoidal")

Por otro lado, coord_quickmap también soluciona la proyección del mapa, tal y como se muestra a continuación, la diferencia es que esta función es una aproximación rápida para preservar líneas rectas que funciona mejor para áreas pequeñas cercanas al ecuador. Ten en cuenta que también puedes aplicar cualquier proyección que desees con el argumento projection de la función, como en los ejemplos anteriores.

Mapa por defecto de Francia en ggplot2

Mapa por defecto

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

p <- ggplot(map_data("france"),
            aes(long, lat, group = group)) +
      geom_polygon(fill = "white", colour = 1)

p

Usando la función coord_quickmap en ggplot2

Arreglando la proyección

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

p <- ggplot(map_data("france"),
            aes(long, lat, group = group)) +
      geom_polygon(fill = "white", colour = 1)

p + coord_quickmap()
Data Sketches

A journey of imagination, exploration, and beautiful data visualizations

Comprar en Amazon
Storytelling con Datos

Visualización de datos para profesionales

Comprar en Amazon
Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon

También te puede interesar