2012-11-04 5 views
0

그리드에 .png를 넣는 방법이 있습니까? 하나의 차트에 4 개의 .png 단일 차트를 표시하고 싶었습니다.표를 그리드에 넣는 방법

enter image description here

+0

당신은'layout'을 보았습니까? –

+0

귀하의 질문은 모호합니다. R 그래픽 장치에 4 개의 PNG 파일 (예 : 이미 디스크에있는 이미지 파일)을 표시 하시겠습니까? 아니면 하나의 장치에 4 개의 그림을 그려서 PNG로 내 보냅니 까? –

+0

죄송합니다, 설명이 명확하지 않은 경우 .. 이미 디스크에 4 장 .png가 있는데 표시하고 싶었습니다. – Amar

답변

1

는 기본 그래픽에서이 작업을 수행하려면 적어도 세 가지 방법이 있습니다. (내가 좋아하는)

  1. 사용 layout() : 당신이 장치로 분할 된 서브 플롯 것을 인덱스 정수를 포함하는 매트릭스를 전달 layout()

    layout(matrix(1:4, ncol = 2)) 
    for(i in 1:4) 
        plot(1:10) 
    layout() # reset 
    

    . 이러한 인덱스가 매트릭스에 배치되는 방식에 따라 레이아웃이 제어됩니다. 이 행렬에 의해 2x2 레이아웃이 제공됩니다.

    R> matrix(1:4, ncol = 2) 
        [,1] [,2] 
    [1,] 1 3 
    [2,] 2 4 
    

    열은 열로 채 웁니다. 행으로 채우기 matrix() 전화

    R> matrix(1:4, ncol = 2, byrow = TRUE) 
        [,1] [,2] 
    [1,] 1 2 
    [2,] 3 4 
    

    당신이 장치가보고 원하는대로 × 2 하나는 매트릭스 인덱스를 생성하여 달성 할 수있는 더 복잡한 레이아웃에 byrow = TRUE을 사용합니다. 예를 들어, 장치의 오른쪽에 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 
    

    enter image description here

    유사한 레이아웃 split.screen() 달성 할 수 있습니다. 아래 3을 참조하십시오.

  2. mfrow 또는 mfcol 매개 변수를 사용하십시오. 전자는

    split.screen(c(2,2)) 
    for(i in 1:4) { 
        screen(i) 
        plot(1:10) 
    } 
    close.screen(all = TRUE) # reset 
    

    split.screen()split.screen()layout() 같은 매트릭스 입력을 취할 수 사용하는 행을 플롯과 장치 및 열

    op <- par(mfrow = c(2,2)) 
    for(i in 1:4) 
        plot(1:10) 
    par(op) # reset 
    
  3. 세 번째 방법으로, 후자를 채운다.

장치를 분할 한 플롯 영역 수에 따라 플롯의 여백을 줄이거 나 늘려야 할 수 있습니다. 이를 위해 ?par과 여백을 정의 할 수있는 다양한 방법 (예 : 매개 변수 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에 익숙하다면]

+0

환상적입니다. 그러나 이미 모든 .png 파일을 개인 .png 파일로 만든 경우이 파일을 표시하는 데 사용할 수있는 동일한 방법입니까? – Amar

+0

아니요. R에 4 개의 플롯 (png)이 생성 된 경우 위에 표시된 옵션 중 하나에서 4 개의 플롯을 생성하는 코드를 래핑하는 것이 좋습니다. 플롯 장치에서 래스터로 PNG를 렌더링하는 것은 품질이 나쁜 방법입니다. –

+0

오, 고마워 .. btw 그냥 내가 왜 이러는 지 설명하고 싶었어. 내 고객이 모두 4, Chart1.png, chart2.png ... 등등을 원한다. 별도의 파일로. 하나의 .png 파일에서 동일한 4 개의 차트. 문제는 차트에 대해 동일한 코드를 다시 실행하기 때문에 전체 프로세스가 크게 느려집니다. 그게 내가 이미 만든 4 .png를 만들고 그냥 처리 속도를 올려서 거기에 표시 할 일의 레이아웃을 사용하고 싶었던 이유입니다. – Amar

0

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) 
다른 사람이 아마 좋은 생각이 아니다 말했듯이

enter image description here

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 파일을 표시합니다.