r - ggtitle - ggplot title size
¿Cómo arreglar la relación de aspecto en ggplot? (3)
Estoy tratando de cambiar el tamaño de un diagrama para que se ajuste a mi documento, pero estoy teniendo dificultades para lograr que el diagrama trazado sea un cuadrado.
Ejemplo:
pdf(file = "./out.pdf", width = 5, height = 5)
p <- ggplot(mydata, aes(x = col1, y = col2))
print(p)
aux <- dev.off()
Aunque los límites para xey son los mismos, la trama en el resultado no es cuadrada. Supongo que R hace que el panel envolvente sea 5x5 ", pero no le importa el tamaño real del diagrama.
¿Cómo puedo deshacer mis diagramas?
En ggplot
el mecanismo para conservar la relación de aspecto de su trazado es agregar una capa coord_fixed()
al trazado. Esto preservará la relación de aspecto del gráfico en sí, independientemente de la forma del cuadro delimitador real.
(También sugiero que use ggsave
para guardar su diagrama resultante en pdf / png / etc, en lugar de la secuencia pdf(); print(p); dev.off()
).
library(ggplot2)
df <- data.frame(
x = runif(100, 0, 5),
y = runif(100, 0, 5))
ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed()
Para garantizar una relación de aspecto particular, por ejemplo, para el cuadrado, use el theme(aspect.ratio=1)
.
La respuesta de Andrie no da una idea completa, ya que el ejemplo proporciona datos no naturales en los que el rango de x es igual al rango de y. Sin embargo, si los datos fueran:
df <- data.frame(
x = runif(100, 0, 50),
y = runif(100, 0, 5))
ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed()
entonces la trama se vería así:
La función coord_fixed () también tiene un argumento para ajustar la relación de ejes:
ratio
aspecto de razón, expresada como y / x
Para que la trama se pueda cuadrar con:
ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed(ratio=10)
Pero necesita ajustar esto con los límites de las variables o el área de trazado (no todos los límites son muy divisibles por números enteros como estos ejemplos).
Para mayor comprensión: si desea tener en cuenta límites de eje muy diferentes:
df <- data.frame(
x = runif(100, 0, 5000),
y = runif(100, 0, 5))
ratio.display <- 4/3
ratio.values <- (max(df$x)-min(df$x))/(max(df$y)-min(df$y))
plot <- ggplot(df, aes(x=x, y=y)) + geom_point()
plot + coord_fixed(ratio.values / ratio.display)
Resultando en: