Título del gráfico central en ggplot2


256

Hola, este código simple (y todos mis scripts de esta mañana) ha comenzado a darme un título descentrado en ggplot2

Ubuntu version: 16.04

R studio version: Version 0.99.896

R version: 3.3.2

GGPLOT2 version: 2.2.0

Recientemente instalé lo anterior esta mañana para intentar solucionar esto ...

dat <- data.frame(
time = factor(c("Lunch","Dinner"), levels=c("Lunch","Dinner")),
total_bill = c(14.89, 17.23)
)

# Add title, narrower bars, fill color, and change axis labels
ggplot(data=dat, aes(x=time, y=total_bill, fill=time)) + 
  geom_bar(colour="black", fill="#DD8888", width=.8, stat="identity") + 
  guides(fill=FALSE) +
  xlab("Time of day") + ylab("Total bill") +
  ggtitle("Average bill for 2 people")

ingrese la descripción de la imagen aquí


53
uso... + theme(plot.title = element_text(hjust = 0.5))
J_F

Respuestas:


335

De la noticia de lanzamiento de ggplot 2.2.0: "El título principal de la trama ahora está alineado a la izquierda para que funcione mejor con un subtítulo" . Vea también el plot.titleargumento en ?theme: "alineado a la izquierda por defecto".

Como señaló @J_F, puede agregar theme(plot.title = element_text(hjust = 0.5))al centro el título.

ggplot() +
  ggtitle("Default in 2.2.0 is left-aligned")

ingrese la descripción de la imagen aquí

ggplot() +
  ggtitle("Use theme(plot.title = element_text(hjust = 0.5)) to center") +
  theme(plot.title = element_text(hjust = 0.5))

ingrese la descripción de la imagen aquí


Cuando en cambio uso ... theme(plot.title = element_text(hjust = 'center')), recibo los mensajes de advertencia de error: 1: In unit(rep(xp, n), "npc") : NAs introduced by coercionv2: In validDetails.text(x) : NAs introduced by coercion y ningún título. ¿Es esto un error?
James Hirschorn

2
@JamesHirschorn Esto no es un error. El valor utilizado para hjustdebe ser numérico.
Stibu

a partir de ggplot2 versión 3.3.0, el título está centrado por defecto.
Akronix

Si le interesa lo contrario: pasar de alineado al centro a alineado a la izquierda, puede usar esta respuesta de SO: stackoverflow.com/a/57792897/2904315
Akronix

He agregado este código theme(plot.title = element_text(hjust = 0.5)), pero no funcionó, es extraño.
Ahbon

134

Como se indica en la respuesta de Henrik , los títulos están alineados a la izquierda por defecto comenzando con ggplot 2.2.0. Los títulos pueden centrarse agregando esto a la trama:

theme(plot.title = element_text(hjust = 0.5))

Sin embargo, si crea muchas parcelas, puede ser tedioso agregar esta línea en todas partes. Entonces también se podría cambiar el comportamiento predeterminado de ggplot con

theme_update(plot.title = element_text(hjust = 0.5))

Una vez que haya ejecutado esta línea, todas las parcelas creadas posteriormente usarán la configuración del tema plot.title = element_text(hjust = 0.5)como predeterminada:

theme_update(plot.title = element_text(hjust = 0.5))
ggplot() + ggtitle("Default is now set to centered")

ingrese la descripción de la imagen aquí

Para volver a la configuración predeterminada original de ggplot2, puede reiniciar la sesión R o elegir el tema predeterminado con

theme_set(theme_gray())

2

El ggeasypaquete tiene una función llamada easy_center_title()para hacer precisamente eso. Me resulta mucho más atractivo theme(plot.title = element_text(hjust = 0.5))y es mucho más fácil de recordar.

ggplot(data = dat, aes(time, total_bill, fill = time)) + 
  geom_bar(colour = "black", fill = "#DD8888", width = .8, stat = "identity") + 
  guides(fill = FALSE) +
  xlab("Time of day") +
  ylab("Total bill") +
  ggtitle("Average bill for 2 people") +
  ggeasy::easy_center_title()

ingrese la descripción de la imagen aquí

Tenga en cuenta que al escribir esta respuesta, deberá instalar la versión de desarrollo de ggeasyGitHub para usarla easy_center_title(). Puedes hacerlo corriendo remotes::install_github("jonocarroll/ggeasy").

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.