ggplot2中的中心绘图标题

Chr*_*ohn 222 r ggplot2

嗨,这个简单的代码(以及今天早上的所有脚本)已经开始在ggplot2中给我一个偏离中心的标题

Ubuntu version: 16.04

R studio version: Version 0.99.896

R version: 3.3.2

GGPLOT2 version: 2.2.0
Run Code Online (Sandbox Code Playgroud)

今天早上我刚刚安装了上面这个以试图解决这个问题....

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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Hen*_*rik 294

从发布消息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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

ggplot() +
  ggtitle("Use theme(plot.title = element_text(hjust = 0.5)) to center") +
  theme(plot.title = element_text(hjust = 0.5))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • @JamesHirschorn这不是错误。用于`hjust`的值必须是数字。 (2认同)
  • 我添加了这段代码 `theme(plot.title = element_text(hjust = 0.5))`,但它没有成功,这很奇怪。 (2认同)
  • @ahbon我意识到这真的很晚了,但是你把它放入 ggplot 的顺序似乎很重要。我遇到了同样的问题,直到我将它移到 ggplot 的所有输入中的提示底部,然后它才起作用。 (2认同)

Sti*_*ibu 122

正如Henrik回答所述,默认情况下,标题是左对齐的,从ggplot 2.2.0开始.通过将标题添加到图中,标题可以居中:

theme(plot.title = element_text(hjust = 0.5))
Run Code Online (Sandbox Code Playgroud)

但是,如果您创建了许多绘图,则在任何地方添加此行可能会很繁琐.然后,人们也可以改变ggplot的默认行为

theme_update(plot.title = element_text(hjust = 0.5))
Run Code Online (Sandbox Code Playgroud)

运行此行后,之后创建的所有绘图都将使用主题设置plot.title = element_text(hjust = 0.5)作为其默认值:

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

在此输入图像描述

要返回到原始ggplot2默认设置,您可以重新启动R会话或选择默认主题

theme_set(theme_gray())
Run Code Online (Sandbox Code Playgroud)


Tom*_*mmy 9

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()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

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


Rti*_*ist 8

如果您经常使用图表和 ggplot,您可能会厌倦每次添加 theme()。如果您不想按照之前的建议更改默认主题,您可能会发现创建自己的个人主题更容易。

personal_theme = theme(plot.title = 
element_text(hjust = 0.5))
Run Code Online (Sandbox Code Playgroud)

假设您有多个图表 p1、p2 和 p3,只需向其中添加 individual_theme 即可。

p1 + personal_theme
p2 + personal_theme
p3 + personal_theme

dat <- data.frame(
  time = factor(c("Lunch","Dinner"), 
levels=c("Lunch","Dinner")),
  total_bill = c(14.89, 17.23)
)
p1 = 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")

p1 + personal_theme
Run Code Online (Sandbox Code Playgroud)