我创建了一个创建森林图的函数,它在y轴上有标签。我需要创建一些它们来加入外部图形程序。
图形图像将具有相同的宽度,但高度将根据y元素的数量而变化。为此,我首先创建了一个图并手动设置图像高度(i.h1
)。然后我从i.h1
上部(u.m
)和底部(b.m
)边距中减去以获得绘图高度。最后,我将绘图高度除以y标签n1
的数量,以获得一个单位维u = (i.h1 - b.m - u.m) / n1
。
要获得后续图片h.i2
的大小,我只需要h.i2 = u * n2 + b.m + u.m
。
这里是第一张图像的结果,包含27个元素(计算空格)和第二个带有6个元素的图像。
第二张图片高于应有的图像! (紫色线条用于比较)。
此外,下部元件和x轴之间的内部边缘是不同的。因此,即使我使用不同的单位高度,我也会在2张图像中找不到对齐的标签。
我不明白这种行为。任何提示?
这是保存图片的代码:
gt <- ggplot_gtable(ggplot_build(plot)) #plot is a ggplot object
gt$layout$clip[gt$layout$name == "panel"] <- "off"
grid.draw(gt)
if (file != F) {
w = 8.5
h = .33 * max(data$yval) + 4 # .33 is the unit height and 4 are the margin
dev.copy(pdf, if (file == T) sprintf("%s.pdf", gsub('\\n', '', title)) else file, width = w, height = h) # I use dev.copy because ggsave don't accept gtable plots.
invisible(dev.off())
}