Возможно par
и pdf(width, height)
должны быть равны.
png(filename="plot1.png", width=400, height=300, bg="white")
par(mfrow=c(1, 4), mar=c(1, 2, 1, 1), oma=c(0, 0, 0, 0))
replicate(2, barplot(height=c(2,3), width=1, xlim=c(0,2)))
dev.off()
png(filename="plot2.png", width=400, height=300, bg="white")
par(mfrow=c(1, 4), mar=c(1, 2, 1, 1), oma=c(0, 0, 0, 0))
replicate(4, barplot(height=c(2,3), width=1, xlim=c(0,2)))
dev.off()
Другое решение заключается в использовании layout
.
def.par <- par(no.readonly=TRUE) # save par default, for resetting...
# 1 x 2 plot
layout(matrix(c(1:2, 0, 0), nrow=1, ncol=4, byrow=TRUE))
layout.show(n=2) # to inspect layout # MARK
replicate(2, barplot(height=c(2,3), width=1, xlim=c(0,2)))
# 1 x 4 plot
layout(matrix(c(1:4), nrow=1, ncol=4, byrow=TRUE))
layout.show(n=4) # to inspect layout
replicate(4, barplot(height=c(2,3), width=1, xlim=c(0,2)))
# 2 x 4 plot
layout(matrix(c(1:2, 0, 0, 3:6), nrow=2, ncol=4, byrow=TRUE))
layout.show(n=6) # to inspect layout
replicate(2, barplot(height=c(2,3), width=1, xlim=c(0,2)))
replicate(4, barplot(height=c(2,3), width=1, xlim=c(0,2)))
par(def.par) # reset to default
Однако оба решения дают полупустой график 1, причину можно увидеть в коде выше на # MARK
.
Мы могли бы использовать пакет magick
, чтобы «нарезать» первый сюжет до желаемого контента. Сначала мы создаем *.png
с помощью второго метода.
clr <- "#ED7C22" # color
png(filename="plot1.png", width=400, height=300, bg="white")
layout(matrix(c(1:2, 0, 0), nrow=1, ncol=4, byrow=TRUE))
replicate(2, barplot(height=c(2,3), width=1, xlim=c(0,2), col=clr, border=0))
dev.off()
png(filename="plot2.png", width=400, height=300, bg="white")
layout(matrix(c(1:4), nrow=1, ncol=4, byrow=TRUE))
replicate(4, barplot(height=c(2,3), width=1, xlim=c(0,2), col=clr, border=0))
dev.off()
Теперь, используя image_chop
, мы обрезаем plot1.png
до его левой половины.
library(magick)
(i <- image_read("plot1.png"))
i.chopped <- image_chop(i, "200x+200") # says: trim by 200px at pos. 200
Наконец, мы экспортируем расколотое изображение.
image_write(i.chopped, path="plot1.ch.png", format="png")
Участок 1 («рубленый»)
Участок 2