ggplot具有不同字体大小的多行标题

时间:2014-07-28 22:54:36

标签: r ggplot2 title multiline

<SlightlyLookingAway>我试图在R中复制excel图。</SlightlyLookingAway> Excel图表有两行标题。我知道如何通过放置一个&#39; \ n&#39;在标题文本中。我不知道如何处理的是第一行的字体大小比标题的第二行更大......我做了一些谷歌搜索,并提出了一般的缺乏回应。

我意识到我可以用某种注释来拼凑一些东西,但这看起来像是一块污垢。如果这是唯一的答案那么,但我想首先询问社区。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

看起来我找到了一个可以完成工作的黑客攻击解决方案但却没有提供很多灵活性。我们的想法是使用atop()命令以及bold()和scriptstyle()函数来输入数学表达式。

myplot + 
ggtitle(expression(atop(bold("This is the Top Line"), scriptstyle("This is the second line")))) + 
theme(plot.title = element_text(size = 20))

如果您知道更好的解决方案,可以更好地控制行间距,甚至可以调整字体,请告诉我......

答案 1 :(得分:1)

试试这个,

library(gridExtra)

titleGrob <- function(x=c("First line", "second line"), size=10, ...){
  n <- length(x)
  size <- rep(size, length.out=n)
  one_label <- function(x, size, ...)
    textGrob(x, gp=gpar(fontsize=size), ...)
  lg <- mapply(one_label, x=x, size=size, ..., SIMPLIFY=FALSE)

  wg <- lapply(lg, grobWidth) 
  hg <- lapply(lg, grobHeight) 

  widths <- do.call(unit.c, wg)
  heights <- do.call(unit.c, hg) 

  maxwidth <- max(widths)
  g <- frameGrob(layout = grid.layout(n, 1, width=maxwidth, height=heights) )
  for(ii in seq_along(lg))
    g <- placeGrob(g, lg[[ii]], row=ii)

  g
}

grid.newpage()
g <- titleGrob(size=c(18,12))
grid.arrange(qplot(1,1), top=g)

答案 2 :(得分:0)

要完美地居中所有(\n不会这样做),调整每个文本大小,无论行数是多少,同时能够调整行间距,请改用:

例如,用于较小到较大的文字大小

ggtitle(expression(atop(scriptscriptstyle("whateverline1"),atop(scriptstyle("whateverline2"),atop(scriptscriptstyle(""),textstyle("whateverline3"))))))

然后使用labeller=label_parsed

这也适用于facet_gridxlabylab

注意scriptscriptstyle("")来控制线之间的间距。您还可以使用scriptstylescriptscriptstyletextstyle根据您的需要使用不同相对大小的文字,当然也可以在主题部分使用element_text(size=whatevernumber)