我想在同一张图片中有多个图,我希望根据图像获得不同数量的图。确切地说,我首先创建一个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行时(裁剪图像):
仅设置1行时(裁剪图像):
我该怎样防止这种情况?据我所见,我尽我所能。这花了我很长一段时间,所以我想让它工作,而不是切换到gglplot
并再次从头学习一切。它也足够小,我真的希望我能错过一些非常明显的东西。
答案 0 :(得分:4)