47

我在 R 中有以下直方图:

hist(
  alpha, cex.main=2, cex.axis=1.2, cex.lab=1.2,
  main=expression(
    paste("Histogram of ", hat(mu), ", Bootstrap samples, Allianz")
  )
)

标题太长了,想换行。根据这个线程我试过

hist(
  alpha, cex.main=2, cex.axis=1.2, cex.lab=1.2,
  main=expression(
    paste("Histogram of ", hat(mu), ",cat("\n") Bootstrap samples, Allianz")
  )
)

或者

hist(
  alpha, cex.main=2, cex.axis=1.2, cex.lab=1.2,
  main=expression(
    paste("Histogram of ",hat(mu), cat("\n"),", Bootstrap samples, Allianz")
  )
)

但是两者都不起作用,我怎样才能在 paste() 中换行?

4

2 回答 2

48

您可以轻松地在常规中使用换行符paste,但这是 plotmath paste(实际上是一个不同的函数,也没有 'sep' 参数)并且(长) ?plotmath页面特别告诉您它无法完成。那么解决方法是什么?使用 plotmath 函数atop是一种简单的选择:

expression(atop("Histogram of "*hat(mu), Bootstrap~samples*','~Allianz))

这将在逗号处中断并使 plotmath 表达式居中。可以使用更复杂的选项。

这说明了绘制到图形文件。具有讽刺意味的是,第一次尝试给了我一个展示,你的问题是“帽子”(是那些抑扬符吗?)被切断了,这显示了如何增加边距。上边距可能是第三个数字,因此 c(3,3,8,0) 可能更适合您:

 pdf("test.pdf") ;  par(mar=c(10,10,10,10))
 hist(1:10,cex.main=2,cex.axis=1.2,cex.lab=1.2,
 main=expression(atop("Histogram of "*hat(mu), 
                       Bootstrap~samples * ',' ~Allianz)))
 dev.off() # don't need to restore;  this 'par' only applies to pdf()
于 2013-08-14T16:30:47.793 回答
22

您将需要使用其他东西。我被指示使用mtextbquote当我遇到类似的问题时。

alpha = rnorm(1e3)
hist(alpha,cex.main=2,cex.axis=1.2,cex.lab=1.2,main=NULL )

title <- list( bquote( paste( "Histogram of " , hat(mu) ) ) ,
               bquote( paste( "Bootstrap samples, Allianz" ) ) )


mtext(do.call(expression, title ),side=3, line = c(1,-1) , cex = 2 )

在上面的例子中,title感谢@hadley)可以简化为

title <- as.list(expression(paste("Histogram of " , hat(mu)), "Bootstrap samples, Allianz"))

在此处输入图像描述

于 2013-08-14T16:38:46.917 回答