Заголовок центрального графика в ggplot2

256

Привет этот простой код (и все мои сценарии с этого утра) начал давать мне не по центру заголовок в 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

Ответы:

335

Из новостей о выпуске 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должно быть числовым.
Stibu
начиная с версии 3.3.0 ggplot2 заголовок центрируется по умолчанию.
Акроникс,
Если вас интересует обратный путь: переход от выравнивания по центру к выравниванию по левому краю, вы можете использовать этот ответ SO: 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())
Stibu
источник
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").

Томас Найтманн
источник