Tytuł środkowego wykresu w ggplot2

254

Cześć, ten prosty kod (i wszystkie moje skrypty od rana) zaczął nadawać mi tytuł poza centrum w ggplot2

Ubuntu version: 16.04

R studio version: Version 0.99.896

R version: 3.3.2

GGPLOT2 version: 2.2.0

Dziś rano zainstalowałem świeżo powyższą wersję, aby spróbować to naprawić ....

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

wprowadź opis zdjęcia tutaj

Christopher John
źródło
53
użycie... + theme(plot.title = element_text(hjust = 0.5))
J_F

Odpowiedzi:

333

Z wiadomości o wydaniu ggplot 2.2.0: „Główny tytuł fabuły jest teraz wyrównany do lewej, aby lepiej działał z napisami” . Zobacz także plot.titleargument ?theme: „domyślnie wyrównany do lewej”.

Jak wskazał @J_F, możesz dodać, theme(plot.title = element_text(hjust = 0.5))aby wyśrodkować tytuł.

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

wprowadź opis zdjęcia tutaj

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

wprowadź opis zdjęcia tutaj

Henrik
źródło
Kiedy zamiast tego używam ... theme(plot.title = element_text(hjust = 'center')), dostaję komunikaty ostrzegawcze o błędach: 1: In unit(rep(xp, n), "npc") : NAs introduced by coercionv2: In validDetails.text(x) : NAs introduced by coercion i bez tytułu. Czy to błąd?
James Hirschorn,
2
@JamesHirschorn To nie jest błąd. Zastosowana wartość hjustmusi być liczbowa.
Stibu
od wersji ggplot2 3.3.0 tytuł jest domyślnie wyśrodkowany.
Akronix
Jeśli jesteś zainteresowany na odwrót: przejście od wyrównania do środka do wyrównania do lewej, możesz użyć tej odpowiedzi SO: stackoverflow.com/a/57792897/2904315
Akronix
Dodałem ten kod theme(plot.title = element_text(hjust = 0.5)), ale nie zadziałał, to dziwne.
ahbon
134

Jak stwierdzono w odpowiedzi Henrika , tytuły są domyślnie wyrównane do lewej strony, zaczynając od ggplot 2.2.0. Tytuły można wyśrodkować, dodając to do fabuły:

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

Jeśli jednak utworzysz wiele wykresów, dodawanie tej linii wszędzie może być nużące. Można wtedy również zmienić domyślne zachowanie ggplot za pomocą

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

Po uruchomieniu tej linii wszystkie utworzone później działki będą używać plot.title = element_text(hjust = 0.5)domyślnego ustawienia motywu :

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

wprowadź opis zdjęcia tutaj

Aby wrócić do pierwotnych ustawień domyślnych ggplot2, możesz albo ponownie uruchomić sesję R, albo wybrać domyślny motyw za pomocą

theme_set(theme_gray())
Stibu
źródło
2

ggeasyPakiet posiada funkcję o nazwie easy_center_title()właśnie do tego. Uważam to za znacznie bardziej atrakcyjne theme(plot.title = element_text(hjust = 0.5))i łatwiej zapamiętać.

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

wprowadź opis zdjęcia tutaj

Pamiętaj, że pisząc tę ​​odpowiedź, będziesz musiał zainstalować wersję rozwojową ggeasyGitHub, aby użyć easy_center_title(). Możesz to zrobić, uruchamiając remotes::install_github("jonocarroll/ggeasy").

Thomas Neitmann
źródło