2014-10-24 2 views
2

루프의 데이터로 간단한 x, y 선 그래프를 그려 봅니다. 코드는 이러한 플롯을 수백 개 생성하며, 이러한 플롯을 축소판 크기 이미지 (200 x 200 픽셀, DPI는 문제가 아님)에 저장하고이를 데이터와 함께 Excel 파일에 포함시키는 것이 좋습니다. ggplot2를 통해 플로팅 할 때 완벽하게 잘 보이지만 저장할 때 이미지의 일부만 보여주는 자른 이미지 나 레이블/텍스트 크기가 맞지 않는 매우 좁은 줄거리를 얻습니다. 척도를 2로 설정하면 정확하지만 내 기준에 맞지 않습니다.R ggsave 저장 크기 (200 x 200), 축척 된 이미지

내 데이터 프레임은 다음과 같습니다.

Drug=c("A","A","A","A","A","A") 
Con=c(10,100,1000,10,100,1000) 
Treatment=c("Dox","Dox","Dox","Pac","Pac","Pac") 
Value=c(-3.8,-4.5,-14.1,4,-4.6,3.5) 
mat_tbl=data.frame(Drug,Con,Treatment,Value) 

p=ggplot(data=mat_tbl,aes(x=Con,y=Value,colour=Treatment,group=Treatment))+geom_point(size =  4)+geom_line()+labs(title="Drug A",x="Concentration",y="Value") + scale_y_continuous(limits=c(-25,125),breaks=seq(-25,125,by=25)) + theme_bw() 
ggsave(filename = "curve_drug.png",plot=p,width=2,height=2,units="in",scale=1) 

어떤 매개 변수를 사용해야합니까?

+0

내가 다음 명령 줄에서'ImageMagick'를 사용에 "적절한"해상도로 ggsave'ing'좋을 것 또는 'system' 호출을하고'convert image.png -resize 200x200 thumbnail.png'을합니다. 나는 당신이 더 나은 결과를 얻는 것을 발견 할 것이라고 생각한다. (그리고 ImageMagick의'resize'와'convert'를위한 많은 품질 옵션이있다.) – hrbrmstr

+1

'ggsave (..., width = 4, height = 4, units = "in", dpi = 50)'을 시도하십시오. 이렇게하면 텍스트와 여백 크기가 200 x 200 픽셀로 잘 균형을 이룰 수 있습니다. – bdemarest

+0

답장을 보내 주셔서 감사합니다. 이상적으로 나는 완벽한 R 솔루션을 선호합니다. @bdemarest 예상 한 결과를 얻기 위해 다음을 시도했다. 그래도 추가 조정이 필요합니다. ggsave (파일 이름 = "curve_drug.png", 플롯 = p, 폭 = 2, 높이 = 2, 단위 = "in", dpi = 60, 축척 = 2) –

답변

2

ggsave에 대한 도우미 함수로, 나는 이렇게 썼다 기능에서 봐 주시기 바랍니다 : 당신이 볼 수 있듯이

plot.save <- function(plot, 
         width = 800, 
         height = 500, 
         text.factor = 1, 
         filename = paste0(
            format(
             Sys.time(), 
             format = '%Y%m%d-%H%M%S'), '-Rplot.png' 
            ) 
           ) { 

    dpi <- text.factor * 100 
    width.calc <- width/dpi 
    height.calc <- height/dpi 

    ggsave(filename = filename, 
       dpi = dpi, 
       width = width.calc, 
       height = height.calc, 
       units = 'in', 
       plot = plot) 
} 

에서, DPI는 R에서 플롯에 대한 텍스트 요소에 지나지 않는다 .

이것을 고려 :

plot.save(some_ggplot, width = 400, height = 400, text.factor = 1) 

pic1

,536,913 그리고이 63,210

(0.5 1 text.factor 변경)

plot.save(some_ggplot, width = 400, height = 400, text.factor = 0.5) 

pic2

두 이미지 I가 함수에 설정된 것처럼 정확히 400 X 400 픽셀이다.


재미있을 수도 있습니다. plot.save의 첫 번째 매개 변수는 실제 ggplot입니다. 그래서 지금 내가 만들어 내가 많이 사용합니다 (dplyr 패키지를 사용) 다음과 같은 가능한 :

ggplot(...) %>% 
    geom_point() %>% 
    plot.save(200, 200) # here I've set width and height in pixels