rgl
我使用包为我的数据的每个因子级别制作了 3D 图,并将它们保存为 png。我的数据有 30 个不同的级别,产生了 30 个不同的图像文件。现在我想将这些 png 组合成一个图。
我会这样显示它们:
以下示例说明了我想做的事情:
library(rgl)
library(png)
library(gridExtra)
library(ggplot2)
## creates a png in the working directory which can be used as an example
example(surface3d)
rgl.snapshot("example.png")
rgl.close()
## imports the png files; in the example, the same file is imported multiple times.
if(exists("png.df")) rm(png.df)
for (i in 1:9) {
png.i <- readPNG("example.png")
g <- rasterGrob(png.i, interpolate=TRUE)
g <- g$raster
g <- as.vector(g)
g <- matrix(g, nrow = 256, ncol = 256, dimnames = list(1:256, 1:256))
df.i <- data.frame(i = rep(row.names(g), dim(g)[2]), j = rep(colnames(g), each = dim(g)[1]), col=as.vector(g))
df.i$i <- as.numeric(as.character(df.i$i))
df.i$j <- as.numeric(as.character(df.i$j))
df.i$col <- as.character(df.i$col)
df.i$title <- paste ( "Plot", i)
if(exists("png.df")) {
png.df <- rbind(png.df, df.i)
} else {
png.df <- df.i
}
}
rm(df.i, g)
## plots the data
pl <- ggplot(png.df, aes( x = i, y = j))
pl <- pl + geom_raster(aes(fill = col)) + scale_fill_identity()
pl <- pl + scale_y_reverse()
pl <- pl + facet_wrap( ~ title)
pl <- pl + coord_equal() + theme_bw() + theme(panel.grid = element_blank(), axis.text = element_blank(), axis.title = element_blank(), axis.ticks= element_blank())
pl
这工作得很好,但速度很慢。真正的 png 具有更高的分辨率,我想绘制 30 个 png,而不仅仅是 9 个,这导致我的机器在很长一段时间内完全没有响应(i7,8GB RAM)。
导入部分运行良好,但生成的数据框非常大(4.5e+07 行),ggplot(可以理解)无法正确处理。
如何以快速有效的方式创建情节?最好使用 R,但也可以使用其他软件。