如何防止在R中调整字体,绘图对象等的大小?

时间:2017-01-02 18:08:13

标签: r plot

我想在同一张图片中有多个图,我希望根据图像获得不同数量的图。确切地说,我首先创建一个1x2的图表矩阵,然后创建一个3x2的图表矩阵。我想对这两个图像使用相同的基本设置 - 特别是相同的字体大小,因为这适用于纸张,字体大小必须至少为6 pt。

为了实现这一点,我为R编写了以下代码:

filename = "test.png"
font.pt = 6    # font size in pts (1/72 inches)
total.w = 3    # total width in inches
plot.ar = 4/3  # aspect ratio for single plot
mat.col = 2    # number of columns
mat.row = 1    # number of rows
dpi = 300

plot.mar = c(3, 3, 1, 2) + 0.1
plot.mgp = c(2, 1, 0)
plot.w = total.w / mat.col - 0.2 * plot.mar[2] - 0.2 * plot.mar[4]
plot.h = plot.w / plot.ar
total.h = (plot.h + 0.2 * plot.mar[1] + 0.2 * plot.mar[3]) * mat.row

png(filename, width = total.w, height = total.h, res = dpi * 12 / font.pt, units = "in")

par(mfrow = c(mat.row, mat.col), mai = 0.2 * plot.mar, mgp = plot.mgp)

plot(1, 1, axes = T, typ = 'p', pch = 20, xlab = "Y Test", ylab = "X Test")

dev.off()

如您所见,我将总宽度设置为3英寸,然后计算图像的总高度,以便绘图的宽高比正确。字体大小仅通过因子更改分辨率。 无论如何,现在的问题是,当我从mat.row = 1转到mat.row = 3时,字体大小会发生显着变化。其他的东西也会改变,例如轴和边距的标记,即使我特别设置了以英寸为单位的那些。看看:

设置3行时(裁剪图像):

3 rows

仅设置1行时(裁剪图像):

1 row

我该怎样防止这种情况?据我所见,我尽我所能。这花了我很长一段时间,所以我想让它工作,而不是切换到gglplot并再次从头学习一切。它也足够小,我真的希望我能错过一些非常明显的东西。

1 个答案:

答案 0 :(得分:4)

?par我们可以找到:

  

在具有两行和两列的布局中,基本值为“cex”   减少了0.83倍:如果有三个或更多   行或列,缩减系数为0.66。

因此,当您将mfrow值从(2,1)更改为(2,3)时,cex值会从0.83更改为0.66。 cex会影响字体大小和文字行高。

因此,您可以手动为图表指定cex值。

par(mfrow = c(mat.row, mat.col), mai = 0.2 * plot.mar, mgp = plot.mgp, cex = 1)

希望,这是你需要的。

mat.row = 1(裁剪)的情节: mat.row = 1 (cropped) mat.row = 3(裁剪)的情节: mat.row = 3 (cropped)