0

.png をグリッドに配置する方法はありますか。グリッドを使用して、4 つの .png 単一チャートを 1 つに表示したかったのです。

ここに画像の説明を入力

4

3 に答える 3

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ファイルを表示します。

于 2012-11-04T18:27:41.660 に答える
1

ベース グラフィックスでこれを行うには、少なくとも 3 つの方法があります。

  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 番目の行には行全体をカバーする 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 を参照してください。

  2. mfrowまたはmfcolパラメータを使用します。前者はデバイスを行ごとのプロットで埋め、後者は列ごとにプロットで埋めます

    op <- par(mfrow = c(2,2))
    for(i in 1:4)
        plot(1:10)
    par(op)  # reset
    
  3. 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()

[これは、上に示したプロット図を作成するために使用したものです。]

于 2012-11-04T09:43:43.057 に答える
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 )

ここに画像の説明を入力

于 2012-11-04T11:45:34.280 に答える