manipulation ggtitle ggplot change r ggplot2

change - Ajuste el título a la izquierda en ggplot2, o posición absoluta para ggtitle



ggtitle position (4)

Escribí la capa ggdraw() en cowplot específicamente para poder hacer anotaciones fácilmente en cualquier parte de una trama. Establece un sistema de coordenadas que cubre toda el área de trazado, no solo el panel de trazado, y se ejecuta de 0 a 1 en las direcciones x e y. Usando este enfoque, es fácil colocar tu título donde quieras.

library(cowplot) theme_set(theme_gray()) # revert to ggplot2 default theme p <- ggplot(data = economics, aes(x = date, y = unemploy)) + geom_line() + ggtitle("") + # make space for title on the plot xlab("") + ylab("Unemployed [thousands]") ggdraw(p) + draw_text("Unemployment in USA between 1967 and 2007", x = 0.01, y = 0.98, hjust = 0, vjust = 1, size = 12) # default font size is 14, # which is too big for theme_gray()

Me gustaría alinear el título a la izquierda en una trama como esta.

ggplot(data = economics, aes(x = date, y = unemploy)) + geom_line() + ggtitle("Unemployment in USA between 1967 and 2007") + xlab("") + ylab("Unemployed [thousands]")

Primer intento

ggplot(data = economics, aes(x = date, y = unemploy)) + geom_line() + ggtitle("Unemployment in USA for some years") + xlab("") + ylab("Unemployed [thousands]") + theme(plot.title = element_text(hjust = -0.45, vjust=2.12)))

¡Yay éxito! Pero espera ... hay más ... ahora quiero cambiar el título a otra cosa.

ggplot(data = economics, aes(x = date, y = unemploy)) + geom_line() + ggtitle("Unemployment in USA between 1967 and 2007") + xlab("") + ylab("Unemployed [thousands]") + theme(plot.title = element_text(hjust = -0.45, vjust=2.12))

Así que ahora necesito ajustar hjust ... :(

La pregunta

¿Cómo puedo hacer que el título quede justificado a la izquierda (un par de píxeles a la izquierda de la etiqueta del eje y más o menos) una y otra vez sin alterar el valor de hjust? ¿O cuál es la relación entre hjust y la longitud de la cadena?

He tratado de anotar manualmente de acuerdo con esta pregunta , pero luego solo obtuve el título, y nada más por algún motivo, y un error.

¡Gracias!


Hasta que alguien encuentre una solución mejor, una forma sería algo como

library(ggplot2) library(grid) library(gridExtra) p <- ggplot(data = economics, aes(x = date, y = unemploy)) + geom_line() + labs(x = NULL, y = "Unemployed [thousands]", title = NULL) title.grob <- textGrob( label = "Unemployment in USA for some years", x = unit(0, "lines"), y = unit(0, "lines"), hjust = 0, vjust = 0, gp = gpar(fontsize = 16)) p1 <- arrangeGrob(p, top = title.grob) grid.draw(p1)


Otra forma de hacer esto es utilizar theme() . Use la función de labs para etiquetar todos sus títulos x = para el eje x, y = para el eje y, title = para el título de la trama, fill = o colour = si tiene una leyenda que desea poner un título. El theme() interno theme() es hjust = 0 , esto justificará a la izquierda el título de la trama a la izquierda. Puede eliminar hjust = 0 y el título de la trama se alineará en el centro.

labs(x = ''Sex'', y = ''Age Mean'', title = ''Suicide 2003-2013 Age Mean by Sex'') + theme(plot.title = element_text(family = ''Helvetica'', color = ''#666666'', face = ''bold'', size = 18, hjust = 0))


Puede ajustar manualmente el diseño de la salida ggplot . En primer lugar, configuramos la trama básica:

library(ggplot2) p <- ggplot(data = economics, aes(x = date, y = unemploy)) + geom_line() + labs(title = "Unemployment in USA between 1967 and 2007", x = NULL, y = "Unemployed [thousands]")

Ahora podemos convertir el objeto ggplot en un objeto de gtable , e inspeccionar el diseño de los elementos en la parcela. Observe que el title está en la cuarta columna de la cuadrícula, la misma columna que el panel principal.

g <- ggplotGrob(p) g$layout # t l b r z clip name # 17 1 1 10 7 0 on background # 1 5 3 5 3 5 off spacer # 2 6 3 6 3 7 off axis-l # 3 7 3 7 3 3 off spacer # 4 5 4 5 4 6 off axis-t # 5 6 4 6 4 1 on panel # 6 7 4 7 4 9 off axis-b # 7 5 5 5 5 4 off spacer # 8 6 5 6 5 8 off axis-r # 9 7 5 7 5 2 off spacer # 10 4 4 4 4 10 off xlab-t # 11 8 4 8 4 11 off xlab-b # 12 6 2 6 2 12 off ylab-l # 13 6 6 6 6 13 off ylab-r # 14 3 4 3 4 14 off subtitle # 15 2 4 2 4 15 off title # 16 9 4 9 4 16 off caption

Para alinear el title con el borde izquierdo de la gráfica, podemos cambiar el valor de l a 1.

g$layout$l[g$layout$name == "title"] <- 1

Dibuja la cuadrícula modificada:

grid::grid.draw(g)

Resultado: