Jin*_*cko 9 r data-visualization ggplot2
在 ggplot 中居中对齐绘图标题的“lege artis ”方式 - plot.title = element_text(hjust = 0.5) - 将标题置于绘图区域的中心,不包括轴标签。
当轴标签很长时,这可能会变得很难看,例如 Mary Poppins Soundtrack 中的歌曲与角色长度的关系图。
library(tidyverse)
mary_poppins <- data_frame(song = c("Overture", "Sister Suffragette", "The Life I Lead", "The Perfect Nanny", "A Spoonful of Sugar", "Pavement Artist", "Jolly Holiday", "Supercalifragilisticexpialidocious", "Stay Awake", "I Love to Laugh", "A British Bank", "Feed the Birds ", "Fidelity Fiduciary Bank", "Chim Chim Cher-ee", "Step in Time", "A Man Has Dreams", "Let's Go Fly a Kite"
))
mary_poppins <- mary_poppins %>%
mutate(len = nchar(song))
ggplot(data = mary_poppins, aes(x = reorder(song, len), y = len)) +
geom_col(fill = "firebrick") +
coord_flip() +
theme_light() +
theme(axis.title.y = element_blank(),
axis.text = element_text(size = rel(1.5)),
plot.title = element_text(size = rel(2.5), face = "bold", hjust = 0.5,
margin = margin(t = 10, b = 20, unit = "pt"))) +
ggtitle("Mary Poppins") +
ylab("Lenght of title (characters)")
Run Code Online (Sandbox Code Playgroud)
有没有办法将标题集中在整个绘图区域,即。包括轴标签占用的区域?
解决该问题的一个简单方法是将以下内容添加到图中:
theme(plot.title.position = 'plot',
plot.title = element_text(hjust = 0.5))
Run Code Online (Sandbox Code Playgroud)
第一部分告诉我们ggplot使用整个图作为居中的参考,第二部分使标题居中。
小智 6
我发现的简短解决方案:
theme(plot.title = element_text(hjust = -0.2))
Run Code Online (Sandbox Code Playgroud)
hjust参数控制从左对齐到 y 轴的距离。负值将文本向左移动
或者,您可以使用gridExtra::grid.arrange和grid::textGrob创建标题,而无需在视觉上填充它。这基本上会创建一个带有标题的单独绘图对象,并将其粘贴在顶部,无论您的调用内容如何ggplot。
首先将整个ggplot调用存储在一个变量中,例如p1:
grid.arrange(textGrob("Mary Poppins",
gp = gpar(fontsize = 2.5*11, fontface = "bold")),
p1,
heights = c(0.1, 1))
Run Code Online (Sandbox Code Playgroud)
您必须将您的theme()设置转换为gpar(). 的基本尺寸theme_light是 11,这是 2.5*11 的来源(以及 2.5 来自您的rel(2.5))。
这样做的好处是,您知道您的标题将真正居中,而不仅仅是靠眼睛足够近。
| 归档时间: |
|
| 查看次数: |
10768 次 |
| 最近记录: |