Titel des mittleren Diagramms in ggplot2

256

Hallo, dieser einfache Code (und alle meine Skripte von heute Morgen) hat mir in ggplot2 einen außermittigen Titel gegeben

Ubuntu version: 16.04

R studio version: Version 0.99.896

R version: 3.3.2

GGPLOT2 version: 2.2.0

Ich habe das oben genannte heute Morgen frisch installiert, um dies zu beheben ....

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

Geben Sie hier die Bildbeschreibung ein

Christopher John
quelle
53
Verwenden Sie... + theme(plot.title = element_text(hjust = 0.5))
J_F

Antworten:

335

Von der Veröffentlichung Nachricht ggplot 2.2.0: „Die Haupthandlung Titel jetzt linksbündig zu einem besseren Arbeit besser mit einem Untertitel“ . Siehe auch das plot.titleArgument in ?theme: "Standardmäßig linksbündig".

Wie von @J_F hervorgehoben, können Sie hinzufügen, theme(plot.title = element_text(hjust = 0.5))um den Titel zu zentrieren .

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

Geben Sie hier die Bildbeschreibung ein

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

Geben Sie hier die Bildbeschreibung ein

Henrik
quelle
Wenn ich stattdessen benutze, ... theme(plot.title = element_text(hjust = 'center'))erhalte ich die Fehlerwarnmeldungen: 1: In unit(rep(xp, n), "npc") : NAs introduced by coercionv2: In validDetails.text(x) : NAs introduced by coercion und keinen Titel. Ist das ein Fehler?
James Hirschorn
2
@ JamesHirschorn Dies ist kein Fehler. Der für verwendete Wert hjustmuss numerisch sein.
Stibu
Ab ggplot2 Version 3.3.0 wird der Titel standardmäßig zentriert.
Akronix
Wenn Sie sich für die Umkehrung interessieren: Wechseln von zentriert zu linksbündig, können Sie diese Antwort von SO verwenden: stackoverflow.com/a/57792897/2904315
Akronix
Ich habe diesen Code hinzugefügt theme(plot.title = element_text(hjust = 0.5)), aber es hat nicht geklappt, es ist komisch.
Ahbon
134

Wie in der Antwort von Henrik angegeben , werden Titel standardmäßig ab ggplot 2.2.0 linksbündig ausgerichtet. Titel können zentriert werden, indem Sie dies dem Plot hinzufügen:

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

Wenn Sie jedoch viele Diagramme erstellen, kann es mühsam sein, diese Zeile überall hinzuzufügen. Man könnte dann auch das Standardverhalten von ggplot mit ändern

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

Sobald Sie diese Zeile ausgeführt haben, verwenden alle anschließend erstellten Diagramme die Themeneinstellung plot.title = element_text(hjust = 0.5)als Standard:

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

Geben Sie hier die Bildbeschreibung ein

Um zu den ursprünglichen Standardeinstellungen von ggplot2 zurückzukehren, können Sie entweder die R-Sitzung neu starten oder das Standarddesign mit auswählen

theme_set(theme_gray())
Stibu
quelle
2

Das ggeasyPaket hat eine Funktion, die aufgerufen wird easy_center_title(), um genau das zu tun. Ich finde es viel ansprechender als theme(plot.title = element_text(hjust = 0.5))und es ist so viel einfacher, sich daran zu erinnern.

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

Geben Sie hier die Bildbeschreibung ein

Beachten Sie, dass Sie zum Schreiben dieser Antwort die Entwicklungsversion ggeasyvon GitHub installieren müssen, um sie verwenden zu können easy_center_title(). Sie können dies durch Ausführen tun remotes::install_github("jonocarroll/ggeasy").

Thomas Neitmann
quelle