【问题标题】:How to scale legend box or enlarge font size in the legend box in R如何在R中的图例框中缩放图例框或放大字体大小
【发布时间】:2015-05-01 10:54:39
【问题描述】:

我正在使用以下代码来绘制一些伽马分布。

par(mfrow=c(2, 2))
a = 0.5; b = 2
curve(dgamma(x, a, b), from=0.01, to=0.2, ylab="p(x)", cex.lab=1.5)
b = 1
curve(dgamma(x, a, b), from=0.01, to=0.2, col=2, add=T)
b = 0.5
curve(dgamma(x, a, b), from=0.01, to=0.2, col=4, add=T)
legend("topright", bty="n", lty=1, lwd=1.5, col=c(1,2,4), cex=0.5,ft.cex=1,
       c("a = 0.5, b = 2","a = 0.5, b = 1","a = 0.5, b = 0.5"))

a = 1; b = 2
curve(dgamma(x, a, b), from=0.01, to=4, ylab="p(x)", cex.lab=1.5)
b = 1
curve(dgamma(x, a, b), from=0.01, to=4, col=2, add=T)
b = 0.5
curve(dgamma(x, a, b), from=0.01, to=4, col=4, add=T)
legend("topright", bty="n", lty=1, lwd=1.5, col=c(1,2,4), cex=0.5,
       c("a = 1, b = 2","a = 1, b = 1","a = 1, b = 0.5"))

a = 2; b = 2
curve(dgamma(x, a, b), from=0.01, to=8, ylab="p(x)", cex.lab=1.5)
b = 1
curve(dgamma(x, a, b), from=0.01, to=8, col=2, add=T)
b = 0.5
curve(dgamma(x, a, b), from=0.01, to=8, col=4, add=T)
legend("topright", bty="n", lty=1, lwd=1.5, col=c(1,2,4), 
       c("a = 2, b = 2","a = 2, b = 1","a = 2, b = 0.5"))

a = 20; b = 2
curve(dgamma(x, a, b), from=0.01, to=70, ylab="p(x)", cex.lab=1.5)
b = 1
curve(dgamma(x, a, b), from=0.01, to=70, col=2, add=T)
b = 0.5
curve(dgamma(x, a, b), from=0.01, to=70, col=4, add=T)
legend("topright", bty="n", lty=1, lwd=1.5, col=c(1,2,4), 
       c("a = 20, b = 5","a = 20, b = 1","a = 20, b = 0.2"))
par(mfrow=c(1, 1))

如您所见,图例框的尺寸太大。我使用 cex=0.5 来缩小前两个子图中的图例框。但是,缩小框使阅读文本变得困难。因此,

Q1:如何放大图例框中的文字?

另一个问题是,当我增加左上图中标签的字体大小时,它会超出边距。因此,

Q2:如何增加左边距,以免头部从我的 y 标签上切掉?

最后,长宽比很奇怪。因此,

Q3:如何手动设置整个图形的宽高?或者有没有办法缩小两行子图之间的空白?

谢谢!

【问题讨论】:

    标签: r margin font-size


    【解决方案1】:

    如果你增加字体大小,我认为文本将不再适合图例框。所以你需要调整 cex 直到你可以阅读你的文本。在我的屏幕上,下面的脚本有效。如果情节内没有足够的空间,可以将 de legend 放在情节区域之外。

    par(mar=c(2.5,5,1,1), mfrow=c(2, 2))
    a = 0.5; b = 2
    curve(dgamma(x, a, b), from=0.01, to=0.2, ylab="p(x)", cex.lab=1.5)
    b = 1
    curve(dgamma(x, a, b), from=0.01, to=0.2, col=2, add=T)
    b = 0.5
    curve(dgamma(x, a, b), from=0.01, to=0.2, col=4, add=T)
    legend("topright", bty="n", lty=1, lwd=1.5, col=c(1,2,4), cex=0.7, pt.cex(2), 
           c("a = 0.5, b = 2","a = 0.5, b = 1","a = 0.5, b = 0.5"))
    
    a = 1; b = 2
    curve(dgamma(x, a, b), from=0.01, to=4, ylab="p(x)", cex.lab=1.5)
    b = 1
    curve(dgamma(x, a, b), from=0.01, to=4, col=2, add=T)
    b = 0.5
    curve(dgamma(x, a, b), from=0.01, to=4, col=4, add=T)
    legend("topright", bty="n", lty=1, lwd=1.5, col=c(1,2,4), cex=0.5,
           c("a = 1, b = 2","a = 1, b = 1","a = 1, b = 0.5"))
    
    a = 2; b = 2
    curve(dgamma(x, a, b), from=0.01, to=8, ylab="p(x)", cex.lab=1.5)
    b = 1
    curve(dgamma(x, a, b), from=0.01, to=8, col=2, add=T)
    b = 0.5
    curve(dgamma(x, a, b), from=0.01, to=8, col=4, add=T)
    legend("topright", bty="n", lty=1, lwd=1.5, col=c(1,2,4), 
           c("a = 2, b = 2","a = 2, b = 1","a = 2, b = 0.5"))
    
    a = 20; b = 2
    curve(dgamma(x, a, b), from=0.01, to=70, ylab="p(x)", cex.lab=1.5)
    b = 1
    curve(dgamma(x, a, b), from=0.01, to=70, col=2, add=T)
    b = 0.5
    curve(dgamma(x, a, b), from=0.01, to=70, col=4, add=T)
    legend("topright", bty="n", lty=1, lwd=1.5, col=c(1,2,4), 
           c("a = 20, b = 5","a = 20, b = 1","a = 20, b = 0.2"))
    par(mfrow=c(1, 1))
    

    【讨论】:

      【解决方案2】:

      对于 Q2 和 Q3,您可以在 par 函数中使用 mar 参数,例如:

         par(mar=c(2,6,2,2), mfrow=c(2, 2))
      

      这将设置底部、左侧、顶部和右侧边距。 只需放大左边距(以显示您的 Y 标签)并缩小顶部和底部边距(以减少空白)。

      这并不能回答您的 Q1。但是因为你的数字会更大,因为你有更少的空白,你的图例更有可能适合。

      【讨论】:

      • 是的,它解决了 Q2 和 Q3。谢谢!但是字体还是太小了。
      猜你喜欢
      • 2016-03-20
      • 1970-01-01
      • 2023-02-03
      • 1970-01-01
      • 2020-10-29
      • 2013-10-21
      • 2016-05-24
      • 2011-03-12
      • 2016-09-15
      相关资源
      最近更新 更多