2017-05-17 6 views
1

그리드 그래픽으로 만든 플롯/테이블을 "확대"할 수 있는지 궁금한가요?R - 그리드 그래픽 객체에서 "줌"하는 방법

예를 들어 플롯을 만들었지 만 왼쪽 하단에 초점을 맞추고 싶었 기 때문에 플로팅 범위를 x = c (0,0.5) 및 y = c (0, 0.5)로 설정하여 확대 할 수있었습니다.

다음 코드는 대부분 내가 할 수있는 최선의 방법이지만 ggplot의 여백 패널과 같은 고정 된 크기의 요소를 설명 할 수는 없습니다. xrange = c(0,0.1) & yrange = c(0,0.1)으로 스케일링을 변경하면 ggplot 여백 패널이 정확히 같은 크기를 유지하고 겹쳐진 grid.text 요소와 ggplot 포인트가 정렬되지 않게됩니다.

library(ggplot2) 
library(dplyr) 
library(grid) 


PLOT <- ggplot(iris , aes(x = Sepal.Width , y = Sepal.Length)) + geom_point() 
GPLOT <- ggplotGrob(PLOT) 

COORDS <- expand.grid(c(0:10) , c(0:10)) %>% 
    as_data_frame() %>% 
    setNames(c("x" , "y")) %>% 
    mutate(label = paste0(x , "," ,y)) %>% 
    mutate(x= x/10 , y = y/10) 


xrange <- c(0, 0.5) 
yrange <- c(0, 0.5) 

grid.newpage() 
pushViewport(
    viewport(
     x = 0.5 + (0.5 - mean(xrange))/diff(xrange) , 
     y = 0.5 + (0.5 - mean(yrange))/diff(yrange), 
     width = 1/diff(xrange) , 
     height = 1/diff(yrange) 
    ) 
) 

grid.draw(GPLOT) 
grid.text(label = COORDS$label , x = COORDS$x , y = COORDS$y) 

답변

1

플롯 패널에만 grid.text 요소를 중첩해도 되겠습니까? 그렇다면이 같은 것이 효과가있을 수 있습니다.

PLOT <- ggplot(iris , aes(x = Sepal.Width , y = Sepal.Length)) + geom_point() 
GPLOT <- ggplotGrob(PLOT) 

COORDS <- expand.grid(c(0:10) , c(0:10)) %>% 
    as_data_frame() %>% 
    setNames(c("x" , "y")) %>% 
    mutate(label = paste0(x , "," ,y)) %>% 
    mutate(x= x/10 , y = y/10) 


xrange <- c(0, .5) 
yrange <- c(0, .5) 



grid.newpage() 

# Draw the labels on the plot panel 
GPLOT$layout$clip = "off" # so that labels on the boundary get drawn 
grid.draw(GPLOT) 
downViewport("panel.6-4-6-4") # The panel viewport - current.vpTree() 
grid.text(label = COORDS$label , x = COORDS$x , y = COORDS$y) 

grab = grid.grab() # Grab that plot 

# Then proceed as before - zoom into this plot 
grid.newpage() 
pushViewport(
    vp = viewport(
     x = 0.5 + (0.5 - mean(xrange))/diff(xrange) , 
     y = 0.5 + (0.5 - mean(yrange))/diff(yrange), 
     width = 1/diff(xrange) , 
     height = 1/diff(yrange), name = "Size" 
    ) 
) 

grid.draw(grab) 

enter image description here