Заголовок центрального сюжету в ggplot2


254

Привіт, цей простий код (і всі мої сценарії з цього ранку) почав давати мені заголовок в центрі ggplot2

Ubuntu version: 16.04

R studio version: Version 0.99.896

R version: 3.3.2

GGPLOT2 version: 2.2.0

Я щойно встановив вищезазначене сьогодні вранці, щоб спробувати виправити це ....

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

введіть тут опис зображення


53
використання... + theme(plot.title = element_text(hjust = 0.5))
J_F

Відповіді:


333

З новин про реліз ggplot 2.2.0: "Основна назва сюжету тепер вирівняна ліворуч, щоб краще працювати з підзаголовком" . Дивіться також plot.titleаргумент у розділі ?theme: "Вирівняно ліворуч за замовчуванням".

Як вказував @J_F, ви можете додати theme(plot.title = element_text(hjust = 0.5))назву до центру.

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

введіть тут опис зображення

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

введіть тут опис зображення


Коли я замість цього використовую, ... theme(plot.title = element_text(hjust = 'center'))я отримую повідомлення з попередженнями про помилки: 1: In unit(rep(xp, n), "npc") : NAs introduced by coercionv2: In validDetails.text(x) : NAs introduced by coercion а заголовок відсутній. Це помилка?
Джеймс Гіршорн

2
@JamesHirschorn Це не помилка. Значення, яке використовується для, hjustмає бути числовим.
Стибу

станом на ggplot2 версії 3.3.0, за замовчуванням розміщено заголовок.
Akronix

Якщо ви зацікавлені в тому, навпаки: переміщення з центру-alinged до лівого краю, то ви можете використовувати цей відповідь так: stackoverflow.com/a/57792897/2904315
Akronix

Я додав цей код theme(plot.title = element_text(hjust = 0.5)), але він не вийшов, це дивно.
ахбон

134

Як зазначено у відповіді Генріка , заголовки за замовчуванням вирівнюються ліворуч, починаючи з ggplot 2.2.0. Заголовки можна відцентрувати, додавши це до сюжету:

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

Однак якщо ви створюєте багато сюжетів, додавати цей рядок можна скрізь нудно. Потім можна також змінити типову поведінку ggplot за допомогою

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

Після запуску цього рядка всі створені після цього сюжети будуть використовувати тему plot.title = element_text(hjust = 0.5)як за замовчуванням:

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

введіть тут опис зображення

Щоб повернутися до початкових налаштувань за замовчуванням ggplot2, ви можете або перезапустити сеанс R, або обрати тему за замовчуванням

theme_set(theme_gray())

2

У ggeasyпакеті є функція, закликана easy_center_title()робити саме це. Мені це набагато привабливіше, ніж theme(plot.title = element_text(hjust = 0.5))запам'ятати.

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

введіть тут опис зображення

Зауважте, що на момент написання цієї відповіді вам потрібно буде встановити розробну версію ggeasyвід GitHub easy_center_title(). Це можна зробити, запустивши remotes::install_github("jonocarroll/ggeasy").

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.