los - Fuerza el diagrama de dispersión ggplot2 para que tenga forma cuadrada
ggplot2 tutorial español (4)
Puedo forzar que el diagrama de dispersión ggplot2 tenga forma cuadrada con la misma escala xlim()
usando xlim()
y ylim()
, pero necesita un cálculo manual de los límites. ¿Hay alguna forma más conveniente de hacerlo?
Por forma cuadrada me refiero a dos requisitos:
- La misma escala en los ejes xey.
- La misma longitud de los ejes xey.
Probablemente el código más feo que veas hoy, pero funciona.
Los rangos de sus ejes x e y son accesibles desde ggplot_build
:
r<-max(abs(ggplot_build(your_plot)$panel$ranges[[1]]$x.range))
s<-max(abs(ggplot_build(your_plot)$panel$ranges[[1]]$y.range))
t<-round(max(r,s),1)
your_plot<-your_plot+coord_equal(xlim=c(-t,t),ylim=c(-t,t))
Si desea hacer que los puntos de escala de distancia sean iguales, entonces use coord_fixed() :
p <- ggplot(...)
p <- p + coord_fixed() # ratio parameter defaults to 1 i.e. y / x = 1
Si quiere asegurarse de que el gráfico resultante sea cuadrado, también deberá especificar que los límites xey sean iguales (o al menos tengan el mismo rango). xlim
e ylim
son ambos argumentos para coord_fixed
. Entonces puedes hacer esto manualmente usando esos argumentos. O puede usar una función para extraer los límites de los datos.
Sobre la base de la respuesta de Ramons, esta función funciona muy bien para mí y la considero no tan fea, ya que uno puede ocultar la definición de la función ...
squarePlot <- function(plt){
return(plt+coord_equal()+
expand_limits(x=ggplot_build(plt)$panel$ranges[[1]]$y.range,
y=ggplot_build(plt)$panel$ranges[[1]]$x.range))
}
el simple hecho de ajustar el código de Ramon en una función no funcionó para mí porque la variable t se define en el entorno "incorrecto".