Título da plotagem central em ggplot2

256

Olá, este código simples (e todos os meus scripts desta manhã) começou a me dar um título fora do centro no ggplot2

Ubuntu version: 16.04

R studio version: Version 0.99.896

R version: 3.3.2

GGPLOT2 version: 2.2.0

Eu instalei recentemente o acima esta manhã para tentar corrigir isso ....

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")

insira a descrição da imagem aqui

Christopher John
fonte
53
use... + theme(plot.title = element_text(hjust = 0.5))
J_F 18/11/16

Respostas:

335

Nas notícias de lançamento de ggplot 2.2.0: "O título principal da trama agora está alinhado à esquerda para melhor funcionar melhor com uma legenda" . Veja também o plot.titleargumento em ?theme: "alinhado à esquerda por padrão".

Como apontado por @J_F, você pode adicionar theme(plot.title = element_text(hjust = 0.5))para centralizar o título.

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

insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

Henrik
fonte
Quando, em vez disso, uso ... theme(plot.title = element_text(hjust = 'center')), recebo as mensagens de aviso de erro: 1: In unit(rep(xp, n), "npc") : NAs introduced by coercionv2: In validDetails.text(x) : NAs introduced by coercion e nenhum título. Isso é um inseto?
James Hirschorn 17/03/19
2
@JamesHirschorn Isso não é um bug. O valor usado para hjustdeve ser numérico.
Stibu 23/03
a partir do ggplot2 versão 3.3.0, o título é centralizado por padrão.
Akronix 23/04
Se você estiver interessado no contrário: movendo-se do alinhado ao centro para o alinhado à esquerda, você pode usar esta resposta do SO: stackoverflow.com/a/57792897/2904315
Akronix
Eu adicionei esse código theme(plot.title = element_text(hjust = 0.5)), mas não deu certo, é estranho.
ahbon 16/06
134

Como indicado na resposta de Henrik , os títulos são alinhados à esquerda por padrão, começando com o ggplot 2.2.0. Os títulos podem ser centralizados, adicionando-o à plotagem:

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

No entanto, se você criar muitos gráficos, pode ser entediante adicionar essa linha em qualquer lugar. Pode-se também mudar o comportamento padrão do ggplot com

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

Depois de executar esta linha, todos os gráficos criados depois usarão a configuração do tema plot.title = element_text(hjust = 0.5)como padrão:

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

insira a descrição da imagem aqui

Para voltar às configurações padrão originais do ggplot2, você pode reiniciar a sessão R ou escolher o tema padrão com

theme_set(theme_gray())
Stibu
fonte
2

O ggeasypacote tem uma função chamada easy_center_title()para fazer exatamente isso. Acho isso muito mais atraente theme(plot.title = element_text(hjust = 0.5))e muito mais fácil de lembrar.

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()

insira a descrição da imagem aqui

Observe que, ao escrever esta resposta, você precisará instalar a versão de desenvolvimento ggeasydo GitHub para usá-lo easy_center_title(). Você pode fazer isso executando remotes::install_github("jonocarroll/ggeasy").

Thomas Neitmann
fonte