首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ggplot2中左调整标题,或对ggtitle的绝对位置

在ggplot2中左调整标题,或对ggtitle的绝对位置
EN

Stack Overflow用户
提问于 2014-08-20 09:22:20
回答 5查看 50.9K关注 0票数 44

我想把标题放在这样的情节中

代码语言:javascript
复制
ggplot(data = economics, aes(x = date, y = unemploy)) +
 geom_line() +
 ggtitle("Unemployment in USA between 1967 and 2007") +
 xlab("") +
 ylab("Unemployed [thousands]")

第一次尝试

代码语言:javascript
复制
ggplot(data = economics, aes(x = date, y = unemploy)) + geom_line() +
 ggtitle("Unemployment in USA for some years") +
 xlab("") +
 ylab("Unemployed [thousands]") +
 theme(plot.title = element_text(hjust = -0.45, vjust=2.12)))

太成功了!但是等等..。还有更多。现在我想把标题改成别的东西。

代码语言:javascript
复制
ggplot(data = economics, aes(x = date, y = unemploy)) +
 geom_line() +
 ggtitle("Unemployment in USA between 1967 and 2007") +
 xlab("") +
 ylab("Unemployed [thousands]") +
 theme(plot.title = element_text(hjust = -0.45, vjust=2.12))

所以现在我需要调整一下.:(

问题

如何使标题一次又一次地对齐(y轴标签左边的几个像素),而不影响the值?或者,and与字符串长度之间的关系是什么?

我试着按照这个问题手动注释,但是之后我只得到了标题,没有其他原因--还有一个错误。

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-08-20 09:43:15

在有人想出更好的解决方案之前,一种方法是

代码语言:javascript
复制
library(ggplot2)
library(grid)
library(gridExtra)
p <- ggplot(data = economics, aes(x = date, y = unemploy)) +
    geom_line() +
    labs(x = NULL, y = "Unemployed [thousands]", title = NULL)

title.grob <- textGrob(
    label = "Unemployment in USA for some years",
    x = unit(0, "lines"), 
    y = unit(0, "lines"),
    hjust = 0, vjust = 0,
    gp = gpar(fontsize = 16))

p1 <- arrangeGrob(p, top = title.grob)
grid.draw(p1)

票数 31
EN

Stack Overflow用户

发布于 2017-12-03 17:48:42

您可以手动调整ggplot输出的布局。首先,我们建立了基本的情节:

代码语言:javascript
复制
library(ggplot2)
p <- ggplot(data = economics, aes(x = date, y = unemploy)) +
 geom_line() +
 labs(title = "Unemployment in USA between 1967 and 2007", 
      x = NULL, y = "Unemployed [thousands]")

现在,我们可以将ggplot对象转换为gtable对象,并检查绘图中元素的布局。注意,title位于网格的第四列中,与主面板的列相同。

代码语言:javascript
复制
g <- ggplotGrob(p)
g$layout
#    t l  b r  z clip       name
# 17 1 1 10 7  0   on background
# 1  5 3  5 3  5  off     spacer
# 2  6 3  6 3  7  off     axis-l
# 3  7 3  7 3  3  off     spacer
# 4  5 4  5 4  6  off     axis-t
# 5  6 4  6 4  1   on      panel
# 6  7 4  7 4  9  off     axis-b
# 7  5 5  5 5  4  off     spacer
# 8  6 5  6 5  8  off     axis-r
# 9  7 5  7 5  2  off     spacer
# 10 4 4  4 4 10  off     xlab-t
# 11 8 4  8 4 11  off     xlab-b
# 12 6 2  6 2 12  off     ylab-l
# 13 6 6  6 6 13  off     ylab-r
# 14 3 4  3 4 14  off   subtitle
# 15 2 4  2 4 15  off      title
# 16 9 4  9 4 16  off    caption

要使title与图的左侧对齐,我们可以将l值更改为1。

代码语言:javascript
复制
g$layout$l[g$layout$name == "title"] <- 1

绘制修改后的网格:

代码语言:javascript
复制
grid::grid.draw(g)

结果:

票数 14
EN

Stack Overflow用户

发布于 2021-05-07 15:17:21

由于ggplot 3.3.0的发布,您还可以使用plot.title.position = "plot"将标题和plot.caption.position = "plot副标题放置在整个绘图的左侧。

代码语言:javascript
复制
ggplot(data = economics, aes(x = date, y = unemploy)) +
    geom_line() +
    ggtitle("Unemployment in USA between 1967 and 2007") +
    xlab("") +
    ylab("Unemployed [thousands]") +
    theme(plot.title.position = "plot")

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25401111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档