从 PNG 文件的 grid.arrange 裁剪 ggsave 的顶部和底部输出
Cropping the top and bottom output of ggsave from grid.arrange of PNG Files
library(grid)
library(gridExtra)
library(png)
library(ggplot2)
library(RCurl)
PNG_1 <- readPNG(getURLContent("https://i.ibb.co/MVx1QsQ/A.png"))
PNG_2 <- readPNG(getURLContent("https://i.ibb.co/kHVGNfQ/B.png"))
PNG_3 <- readPNG(getURLContent("https://i.ibb.co/yVf3Hjg/C.png"))
grid <- grid.arrange(rasterGrob(PNG_1), rasterGrob(PNG_2), rasterGrob(PNG_3), ncol=3)
ggsave(grid,filename="output.png")
Output.png
尝试手动设置输出尺寸,但无济于事。
只是希望删除较大的顶部和底部边距。谢谢
由于绘图会适应设备尺寸,因此获取部件尺寸并不简单。我认为最简单的方法是根据 PNG 尺寸计算纵横比并将设备尺寸提供给 ggsave。
asp <- (ncol(PNG_1)+ncol(PNG_2)+ncol(PNG_3))/max(nrow(PNG_1),nrow(PNG_2),nrow(PNG_3))
ggsave(grid, filename= ..., width=5, height=5/asp)
要拼接这些 PNG,您可以使用此代码来保持原始像素数。
我们不能将 cbind/rbind
函数用作 readPNG
returns 数组而不是矩阵。幸运的是 abind
包提供了一个函数来做到这一点,abind
(
along=2
表示 cbind
,along=1
表示 rbind
)
library(abind)
PNG <- abind(PNG_1,PNG_2,PNG_3,along=2)
writePNG(PNG,"output.png")
library(grid)
library(gridExtra)
library(png)
library(ggplot2)
library(RCurl)
PNG_1 <- readPNG(getURLContent("https://i.ibb.co/MVx1QsQ/A.png"))
PNG_2 <- readPNG(getURLContent("https://i.ibb.co/kHVGNfQ/B.png"))
PNG_3 <- readPNG(getURLContent("https://i.ibb.co/yVf3Hjg/C.png"))
grid <- grid.arrange(rasterGrob(PNG_1), rasterGrob(PNG_2), rasterGrob(PNG_3), ncol=3)
ggsave(grid,filename="output.png")
Output.png
尝试手动设置输出尺寸,但无济于事。
只是希望删除较大的顶部和底部边距。谢谢
由于绘图会适应设备尺寸,因此获取部件尺寸并不简单。我认为最简单的方法是根据 PNG 尺寸计算纵横比并将设备尺寸提供给 ggsave。
asp <- (ncol(PNG_1)+ncol(PNG_2)+ncol(PNG_3))/max(nrow(PNG_1),nrow(PNG_2),nrow(PNG_3))
ggsave(grid, filename= ..., width=5, height=5/asp)
要拼接这些 PNG,您可以使用此代码来保持原始像素数。
我们不能将 cbind/rbind
函数用作 readPNG
returns 数组而不是矩阵。幸运的是 abind
包提供了一个函数来做到这一点,abind
(
along=2
表示 cbind
,along=1
表示 rbind
)
library(abind)
PNG <- abind(PNG_1,PNG_2,PNG_3,along=2)
writePNG(PNG,"output.png")