我正在尝试创建两行上手动格式化的情节标题,其中包含两个斜体字,我已经做了一些{{3 }} 在Stack Exchange上,但没有找到解决这个看似简单的问题的好方法。
这两个物种的科学名称相当长,因此需要多行标题(ggplot2不会格式化)。
目标:
..........第一行标题 Species
第二行词 anotherItalicSpecies 结束
ggplot(mtcars,aes(x=wt,y=mpg))+
geom_point()+
labs(title= expression(paste(atop("First line of title with ", atop((italic("Species")))),"
secondline words", italic("anotherSpecies"), "the end")))
产生以下错位标题:
答案 0 :(得分:13)
结合使用atop
,paste
,italic
和scriptstyle
:
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
labs(title = ~ atop(paste('First line of title with ',italic("Species")),
paste(scriptstyle(italic("Species")),
scriptstyle(" secondline words "),
scriptstyle(italic("anotherSpecies")),
scriptstyle(" the end"))))
为您提供所需的结果:
使用scriptstyle
并不是必需的,但是使用比主标题更小的字体更好。
另见?plotmath
其他有用的自定义。
答案 1 :(得分:7)
作为在title
中插入换行符的替代方法,您可以将title
与subtitle
一起使用(可从ggplot 2.2.0
获取)。可能这会使plothmath
更加直截了当。
p <- ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
labs(title = expression("First line: "*italic("Honorificabilitudinitatibus")),
subtitle = expression("Second line: "*italic("Honorificabilitudinitatibus praelongus")*" and more"))
p
如果您希望两行的字体大小相同,请在size
中设置所需的theme
。
p + theme(plot.title = element_text(size = 12),
plot.subtitle = element_text(size = 12))
请注意,默认情况下,ggplot2 2.2.0
中的标题和副标题都是左对齐的。通过将hjust = 0.5
添加到上方的element_text
,可以使文字居中。
答案 2 :(得分:0)
我们也可以打两次cowplot::draw_label()
(从this的讨论中得到启发)。但是,我们需要调整位置并为自定义标题留出足够的空间。我对这种方法以及在ggplot2 two-line label with expression中使用ggplot2::annotation_custom()
进行了更多说明。
library(ggplot2)
library(cowplot)
#>
#> Attaching package: 'cowplot'
#> The following object is masked from 'package:ggplot2':
#>
#> ggsave
# The two lines we wish on the plot. The ~~ creates extra space between the
# expression's components, might be needed here.
line_1 <- expression("First Line of Title with" ~~ italic("Species"))
line_2 <- expression(italic("Species") ~~ "second line words" ~~ italic("anotherSpecies") ~~ "the end")
# Make enough space for the custom two lines title
p <- ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
labs(title = "") + # empty title
# Force a wider top margin to make enough space
theme(plot.title = element_text(size = 10, # also adjust text size if needed
margin = margin(t = 10, r = 0, b = 0, l = 0,
unit = "mm")))
# Call cowplot::draw_label two times to plot the two lines of text
ggdraw(p) +
draw_label(line_1, x = 0.55, y = 0.97) +
draw_label(line_2, x = 0.55, y = 0.93)
由reprex package(v0.2.1)于2019-01-14创建