ggplot 2中的多行标题,带有多个斜体字

时间:2016-11-21 12:37:50

标签: r plot ggplot2

我正在尝试创建两行上手动格式化的情节标题,其中包含两个斜体字,我已经做了一些{{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")))

产生以下错位标题:

searching

3 个答案:

答案 0 :(得分:13)

结合使用atoppasteitalicscriptstyle

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"))))

为您提供所需的结果:

enter image description here

使用scriptstyle并不是必需的,但是使用比主标题更小的字体更好。

另见?plotmath其他有用的自定义。

答案 1 :(得分:7)

作为在title中插入换行符的替代方法,您可以将titlesubtitle一起使用(可从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

enter image description here

如果您希望两行的字体大小相同,请在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创建