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.
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
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))
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))
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. Por defecto, una unidad a lo largo del eje X será la misma unidad a lo largo del eje Y. Puedes utilizar el argumento ratio
para especificar la relación de aspecto deseada expresada como y/x
.
# 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()
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
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()
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:
# 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.
# 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")
coord_polar
Las coordenadas polares se pueden aplicar utilizando coord_polar
. Este tipo de coordinadas se usan 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 gráfico 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()
# 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")
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 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
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
# 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")
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
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
# install.packages("ggplot2")
library(ggplot2)
p <- ggplot(map_data("france"),
aes(long, lat, group = group)) +
geom_polygon(fill = "white", colour = 1)
p
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()
También te puede interesar