有没有办法将.png放入网格中。我想使用网格在一个中显示4个.png单个图表。
答案 0 :(得分:2)
正如其他人所说,这可能不是一个好主意,但
library(gridExtra)
library(png)
img <- rasterGrob(readPNG(system.file("img", "Rlogo.png", package="png")),
width=unit(1,"npc"), height=unit(1,"npc"))
grid.arrange(img, img, img, img, ncol=2)
将在设备上显示2x2 png文件。
答案 1 :(得分:1)
在基本图形中至少有三种方法可以做到这一点。
使用layout()
(我最喜欢的):
layout(matrix(1:4, ncol = 2))
for(i in 1:4)
plot(1:10)
layout() # reset
使用layout()
传入包含整数的矩阵,该整数将设备分割成的子图编入索引。如何在矩阵中排列这些索引来控制布局。 2x2布局由此矩阵
R> matrix(1:4, ncol = 2)
[,1] [,2]
[1,] 1 3
[2,] 2 4
请注意按列填充。要按行填充,请在byrow = TRUE
调用
matrix()
R> matrix(1:4, ncol = 2, byrow = TRUE)
[,1] [,2]
[1,] 1 2
[2,] 3 4
更复杂的布局,可以通过在矩阵中创建索引来实现2x2布局,就像您希望设备看起来一样。例如,对于具有3行的设备,第一行包含设备右侧的1个绘图区域,第二行具有覆盖整行和第三行2个绘图区域的单个绘图区域,我们将执行此操作
matrix(c(0,1,
2,2,
3,4), ncol = 2, byrow = TRUE)
用图表填充
layout(matrix(c(0,1,
2,2,
3,4), ncol = 2, byrow = TRUE))
for(i in 1:4)
plot(1:10)
layout(1) # reset
使用split.screen()
可以实现类似的布局。见下文。
使用mfrow
或mfcol
参数。前者用行填充设备,后者按行填充
op <- par(mfrow = c(2,2))
for(i in 1:4)
plot(1:10)
par(op) # reset
第三种方法是使用split.screen()
split.screen(c(2,2))
for(i in 1:4) {
screen(i)
plot(1:10)
}
close.screen(all = TRUE) # reset
split.screen()
也可以采用矩阵输入,例如layout()
。
根据您将设备拆分的绘图区域数量,您可能需要或想要缩小绘图的边距。为此,请参阅?par
以及定义边距的各种方式(例如参数mar
)。
要将这些作为PNG文件,请将所有命令包装在
中png(file = "foo.png", .....) ## the ..... is where you place options, see ?png
## plotting commands here
dev.off()
e.g。
png("layout.png", height = 600, width = 600, pointsize = 14)
layout(matrix(c(0,1,
2,2,
3,4), ncol = 2, byrow = TRUE))
for(i in 1:4)
plot(1:10)
layout(1) # reset
dev.off()
[这是我用来创建上面显示的情节图。]
答案 2 :(得分:0)
如果您熟悉ggplot,facet_grid()
可能就是您要找的地方:
df <- data.frame( x = rnorm(40), y = rnorm(40) )
df <- cbind( df, expand.grid( c('A', 'B'), c('C', 'D' ) ) )
head( df )
x y Var1 Var2
1 -1.27990165 1.1697183 A C
2 -0.65083905 0.4743215 B C
3 0.23181562 0.5092162 A D
4 -0.01370950 -0.1704988 B D
5 -1.20182791 -0.3525845 A C
6 0.04877524 0.8801793 B C
library( "ggplot2" )
g <- ggplot( df ) +
geom_point( aes(x = x, y = y) ) +
facet_grid( Var1 ~ Var2 )
ggsave( "plot.png", g )