具有不同字体大小,面部等的多行ggplot标题

时间:2016-02-12 16:07:49

标签: r ggplot2

我已经搜索了SO和其他网站,但找不到我的[Test] public void SomeTestCase() { ClassUnderTest sut = new ClassUnderTest(); Func<string, bool> func = (param)=> { Assert.That(param, Is.EqualTo("123")); return true;//or whatever }; sut.Process(func); } 问题的解决方案。我知道还有其他一些例子,但我还没有能够成功地直接应用它们。

我想要做的是制作一个多线图标题,其中第一行是粗体,大小= 10,然后在第一行下面是第二行(可能是第三行),更多描述性行在非 - 粗,尺寸= 8。踢球者是我试图让这个左右在y轴上对齐。 此左对齐是使此问题与众不同的原因,因为之前的答案(包括由主持人关联的答案)使用的ggtitle()不允许左对齐,或者不会将其包含在链接的答案中。

以下是我目前的情节:

enter image description here

atop()

我尝试过使用title <- paste("An analysis of the mtcars dataset ") subheader <- paste("How does mpg change by \n number of cyl?") ggplot(mtcars, aes(mpg,cyl))+ geom_smooth(aes(fill="Mean",level=0.095)) + ggtitle(paste0(title,"\n",subheader)) + scale_fill_grey(name='95% Confidence\n Interval',start=.65,end=.65) + theme(plot.title = element_text(size = rel(2.0),hjust=-.1,face="bold")) bquote()mtext(),甚至还有一个蹩脚的atop(),其中包含额外的空格来推送标题....但我没有&# 39;能够找到解决方案。

如果您有任何疑问或需要澄清,请告诉我。我感谢任何帮助!

3 个答案:

答案 0 :(得分:5)

Here are three approaches using tableGrob to split a text into multiple lines,

enter image description here

strUser == "1"

答案 1 :(得分:3)

这是一种使用自定义注释的方法。理由很简单,但您必须手动确定文本放置的坐标。如果你要做很多事情,也许你可以创建一些逻辑来自动完成这一步。

library(grid) 

title <- paste("An analysis of the mtcars dataset  ")
subheader <- paste("How does mpg change by\nnumber of cyl?")

p1 = ggplot(mtcars, aes(mpg,cyl))+ 
  geom_smooth(aes(fill="Mean",level=0.095)) +
  scale_fill_grey(name='95% Confidence\n Interval',start=.65,end=.65) 

p1 = p1 + 
  annotation_custom(grob=textGrob(title, just="left", 
                                  gp=gpar(fontsize=10, fontface="bold")),
                    xmin=9.8, xmax=9.8, ymin=11.7) +
  annotation_custom(grob=textGrob(subheader, just="left", 
                                  gp=gpar(fontsize=8, lineheight=1)),
                    xmin=9.8, xmax=9.8, ymin=10.4) +
  theme(plot.margin=unit(c(4,rep(0.5,3)), "lines"))

# Turn off clipping
p1 <- ggplot_gtable(ggplot_build(p1))
p1$layout$clip[p1$layout$name == "panel"] <- "off"
grid.draw(p1) 

enter image description here

答案 2 :(得分:2)

您可以使用this方法,但理由是令人难以置信的挑剔。因为atop用于格式化方程式,所以它会自动居中,因此您需要通过在较长的标题之前插入空格并使用hjust来解决这个问题。这种方法似乎也有标题大小的上限;空间必须有空间向左移动。

我管理的内容:

library(ggplot2)
title <- paste("           An analysis of the mtcars dataset")
subheader <- paste("How does mpg change by number of cyl?")

ggplot(mtcars, aes(mpg,cyl)) + 
  geom_smooth(aes(fill="Mean",level=0.095)) +
  ggtitle(bquote(atop(bold(.(title)), atop(.(subheader), ""))))  +
  scale_fill_grey(name='95% Confidence\n Interval',start=.65,end=.65) +
  theme(plot.title = element_text(size = rel(1.3),hjust=-.6,face="bold"))

plot with title and subtitle left justified

要进一步发展,您可能需要to break into grid