我有12个12个PNG文件,我希望将它们组合在一个带有R的4x3网格的单个图中。
到目前为止,我可以使用
创建网格plot(c(0,4), c(0,3), type = "n", xaxt = "n", yaxt = "n", xlab = "", ylab = "")
我可以使用
添加图像rasterImage(readPNG("image1.png"), 0, 3, 1, 2)
rasterImage(readPNG("image2.png"), 1, 3, 2, 2)
等
我得到了我想要的东西,但我也希望为情节中的每个图像添加一个标题。像image1应该有 a。 Image1 和image2应该有 b。 Image2 位于图片之上。 R有办法吗?
提前致谢。
答案 0 :(得分:3)
@ BondedDust建议使用text
是完美的,但使用mfrow
中的mfcol
(或par
)图形参数来布局图表网格可能是明智的。然后,您可以使用plot(..., main='foo')
或title(main='foo')
添加标题。例如:
下载一些示例png图形,并将它们读入列表:
library(png)
pngs <- lapply(LETTERS[1:12], function(x) {
u <- 'http://icons.iconarchive.com/icons/mattahan/umicons/64'
download.file(mode='wb', sprintf('%s/Letter-%s-icon.png', u, x),
f <- tempfile(fileext='.png'))
readPNG(f)
})
使用mfrow
将图表设置为包含4行和3列,并为标题mar
添加上边距。然后使用sapply
(例如)迭代pngs
的元素(实际上是元素的索引1
到12
),依次绘制每个元素:
par(mfrow=c(4, 3), mar=c(0, 0, 3, 0))
sapply(seq_along(pngs), function(i) {
plot.new()
plot.window(xlim=c(0, 1), ylim=c(0, 1), asp=1)
rasterImage(pngs[[i]], 0, 0, 1, 1)
title(paste0(letters[i], '. Image ', i), font.main=2)
})
答案 1 :(得分:1)
试试这个:
text(x=0.5,y=2.95, labels="a. Image1")
text(x=1.5,y=2.95, labels="b. Image1")
如果需要加粗,则需要使用plotmath表达式:
text(x=1.5,y=2.95, labels=expression( bold(b.~Image1) ) )