使用ggplot添加动态字幕

24

我正在尝试使用ggplot添加副标题。 这里有一个类似的问题:如何添加具有不同大小和颜色的ggplot2副标题?,答案如下:

p <- p + ggtitle(expression(atop(paste('TITLE'), atop(italic(paste('SUBTITLE')), ""))))

然而,单词'TITLE''SUBTITLE'需要硬编码,当处理数千个绘图时,这会带来可扩展性和自动化问题。

这样做是行不通的:

plot.title = 'TITLE'
plot.subtitle = 'SUBTITLE'    
p <- p + ggtitle(expression(atop(paste(plot.title), atop(italic(paste(plot.subtitle)), ""))))

我猜如何使用这个想法来正确添加动态字幕,关键在于:是否可以在expression和atop中使用字符变量?


使用@baptiste在您链接的问题中的答案 - 只需将其调整到最新的ggplot2版本 - 它应该也适用于标题中的变量。 - Didzis Elferts
1
@DidzisElferts 'opts'已经过时,请使用'theme'代替。我猜我可以使用opts,但是使用过时的东西似乎只是一个权宜之计。让我们等一下,也许其他人会有其他想法... - Dnaiel
@DidzisElferts 我以为我已经有最新版本了,请冷静点,不明白为什么你不能让别人提出建议... - Dnaiel
@DidzisElferts 好的,那么请给我一些时间来尝试... 顺便感谢您的所有帮助。 - Dnaiel
1
@baptiste对先前问题的答案进行了更新,现在不会有关于opts()的警告。 - Didzis Elferts
1个回答

42

您应该使用函数bquote()而不是expression()来使用存储为变量的标题。变量名应放置在.()中。

plot.title = 'TITLE'
plot.subtitle = 'SUBTITLE'

ggplot(mtcars,aes(disp,mpg))+geom_point()+
  ggtitle(bquote(atop(.(plot.title), atop(italic(.(plot.subtitle)), "")))) 

enter image description here

更新 - ggplot2 版本 2.2.1

最新的 ggplot2 版本现在可以直接生成副标题,因此您不必使用bquote()expression()。这个结果是通过函数labs()的参数subtitle =实现的。

ggplot(mtcars,aes(disp,mpg))+geom_point()+
      labs(title = plot.title,subtitle = plot.subtitle) +
      theme(plot.subtitle = element_text(face = "italic"))

1
哇,你真是个牛人!回答得太棒了,技巧也很赞!这个解决方案真是太优雅了,比那些冗长的主题和选项范式要优雅多了 :-) - Dnaiel
为了插入第三级评论,我已经修改了代码,如下所示:ggplot(mtcars,aes(disp,mpg))+ geom_point()+ ggtitle(bquote(atop(。(plot.title),atop(italic(。(plot.subtitle)),“无法使用参数的第三个标题”))))。还有其他方法吗? - Andrea Ianni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接