【发布时间】:2017-01-02 18:08:12
【问题描述】:
我想在同一个图像中有多个图,并且我想根据图像有不同数量的图。准确地说,我首先创建了一个 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 并再次从头开始学习所有内容。它也足够小,我真的希望我只是错过了一些非常明显的东西。
【问题讨论】:
-
也许你想要
par(ps = font.pt)? -
This SO question/answer 可能会有所帮助。
-
eipi10:也许我误解了这一点,但是那个答案中的人发现的是,当你改变宽度和高度时,元素保持相同的大小。我知道,这正是我在这里尝试使用的。我的问题是,这不是我的具体示例中的工作方式。
-
Nathan Day:我之前尝试过,但没有帮助。这并不奇怪,因为在我的示例中,它甚至不适用于默认字体大小。两种情况下的字体大小相同;分辨率相同;然而,一个文本比另一个大。老实说,目前对我来说这似乎是一个错误。