【问题标题】:Line break in expression()?表达式()中的换行符?
【发布时间】:2013-08-16 17:23:11
【问题描述】:

我在 R 中有以下直方图:

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

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

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() 中换行?

【问题讨论】:

    标签: r plot title line-breaks plotmath


    【解决方案1】:

    您将需要使用其他东西。当我被困在similar problem 时,我被指示使用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"))
    

    【讨论】:

    • @JenBohold 谢谢,唉,我不能相信,我是从 agstudy 那里学到的!
    • 正如我所说...还有更复杂的解决方案。
    • @DWin 我个人觉得这比atop 中的表达式更直观。每行一个bquote
    • 您可以将title 简化为as.list(expression(paste("Histogram of " , hat(mu)), "Bootstrap samples, Allianz"))
    • 在 ggplot 中有任何类似的解决方案吗?
    【解决方案2】:

    您可以轻松地在常规 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()
    

    【讨论】:

    • 感谢您的回答,只剩下一个问题:delta和beta在垂直方向上很大,所以帽子超出了范围。 IE。上面的边框有点像帽子。我怎样才能改变这个?所以把标题往下移一点?
    • par::: opar &lt;- par(oma=c(3,3,3,3)) 有一个 oma 参数 ....做你的绘图 ...par(opar) 在绘图周围创建额外的空间。
    • 当我执行 opar
    • 你的顺序错了opar&lt;-par(.),然后是hist(.),然后是par(opar)par(opar) 正在恢复您在第一次调用 par 时“保存到一边”的默认设置。
    • 我猜是不同的绘图设备。我在我的屏幕设备上对其进行了测试,但我一开始没有遇到问题。如果您打印到 pdf 设备会发生什么?
    猜你喜欢
    • 1970-01-01
    • 2014-04-01
    • 2014-03-10
    • 2011-06-29
    • 2022-10-13
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多