.png をグリッドに配置する方法はありますか。グリッドを使用して、4 つの .png 単一チャートを 1 つに表示したかったのです。
3 に答える
他の人が言っているように、それはおそらく素晴らしいアイデアではありませんが、
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ファイルを表示します。
ベース グラフィックスでこれを行うには、少なくとも 3 つの方法があります。
使用
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 番目の行には行全体をカバーする 1 つのプロット領域があり、3 番目の行には 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()
。以下の 3 を参照してください。mfrow
またはmfcol
パラメータを使用します。前者はデバイスを行ごとのプロットで埋め、後者は列ごとにプロットで埋めますop <- par(mfrow = c(2,2)) for(i in 1:4) plot(1:10) par(op) # reset
3番目の方法は、使用することです
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
そのためには、マージンを定義できるさまざまな方法を参照してください (たとえば、 parameter mar
)。
これらを PNG ファイルとして取得するには、すべてのコマンドを
png(file = "foo.png", .....) ## the ..... is where you place options, see ?png
## plotting commands here
dev.off()
例えば
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()
[これは、上に示したプロット図を作成するために使用したものです。]
あなたが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 )