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

Answers:


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 并且没有标题。这是一个错误吗?
James Hirschorn

2
@JamesHirschorn这不是错误。用于的值hjust必须是数字。
Stibu

从ggplot2版本3.3.0开始,默认情况下标题居中。
Akronix

如果您对另一种方式感兴趣:从居中转为左对齐,则可以使用SO的以下答案:stackoverflow.com/a/57792897/2904315
Akronix

我已经添加了这段代码theme(plot.title = element_text(hjust = 0.5)),但是没有成功,这很奇怪。
阿本

134

Henrik回答所述,标题默认从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()

在此处输入图片说明

请注意,在编写此答案时,您将需要安装ggeasyGitHub 的开发版本才能使用easy_center_title()。您可以通过运行来实现remotes::install_github("jonocarroll/ggeasy")

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.