2016-11-28 3 views
0

동일한 x 축을 공유하지만 y 축의 크기가 몇 배 정도 다른 여러 데이터 세트가 있습니다. 이러한 이유 때문에 y 축의 레이블은 가변 크기이고 ggplot을 사용하여 플로팅하면 x 축의 정렬이 잘못됩니다. 내 플롯을 비교 가능하게 만들려면 모든 x 축이 최종 플롯에서 길이가 같아야합니다. 이것은 매우 간단한 절차로 facetting and grids can be used()입니다. 그러나이 절차는 모든 플롯을 집계하여 동일한 png 또는 eps 파일로 보내는 것을 의미합니다. 몇 가지 이유 (게시물의 범위를 벗어나는)는 각 플롯을 자체 PNG에 저장합니다. 따라서 그림을 비교할 수있게 유지하려면 이미지의 왼쪽 경계와 y 축을 표시하는 선 사이에 동일한 공간을 갖도록해야합니다.별도의 플롯의 y 레이블 왼쪽 정렬 (ggplot)

내 생각 엔 공백으로 레이블을 "패딩"하여 모두 동일한 문자 수를 사용하여 문제를 해결했지만 추측하지 못했습니다. 나는 point.margin을 아무 쓸모없이 변화 시키려고 시도했다. 누군가 이것을 성취하는 방법을 알고 있습니까?

library(stringr) 
library(ggplot2) 
y1 <- seq(1,100,by=1) 
y2 <- seq(1,1000000,by=10000) 
x <- seq(1,100,by=1) 
data <- data.frame(x,y1,y2) 

m1 <- ggplot(data=data,aes(x=x,y=y1)) + geom_line() + 
     scale_y_continuous(labels=function(label) str_pad(label,width=20,side="right")) 
m11 <- m1 + theme_bw() + theme(panel.border = element_blank(), panel.grid.major= element_blank(), panel.grid.minor= element_blank(),axis.line=element_line(colour="black"),axis.text.x=element_text(size=12),axis.text.y=element_text(size=12)) 
m2 <- ggplot(data=data,aes(x=x,y=y2)) + geom_line() + 
     scale_y_continuous(labels=function(label) str_pad(label,width=20,side="right")) 
m21 <- m2 + theme_bw() + theme(panel.border = element_blank(), panel.grid.major= element_blank(), panel.grid.minor= element_blank(),axis.line=element_line(colour="black"),axis.text.x=element_text(size=12),axis.text.y=element_text(size=12)) 

png("m1.png") 
    m11 
dev.off() 
png("m2.png") 
    m21 
dev.off() 

enter image description here enter image description here

편집 : Baptise methods

+0

['set_panel_size' (http://stackoverflow.com/questions/32580946/setting-absolute-size-of-facets-in-ggplot2) – baptiste

+0

를 검색하려고 @ baptiste 나는 당신의 제안을 시도했지만 아직 성공하지 못했습니다. 위의 편집을 확인하십시오. – j91

답변

0

내가 문제를 ADRESS 것 해결책을 발견했다.

먼저 ggplot 개체를 gtables로 변환하십시오.

g1 <- ggplot_gtable(ggplot_build(m11)) 
g2 <- ggplot_gtable(ggplot_build(m21)) 

그런 다음 가장 큰 너비를 찾아 나머지 플롯의 너비를 바꿉니다.

maxWidth = unit.pmax(g1$widths[2:3], g2$widths[2:3]) 
g1$widths[2:3] <- maxWidth 
g2$widths[2:3] <- maxWidth 

마지막으로 grid.draw를 사용하여 플롯을 PNG 장치에 인쇄하십시오.

png("m1.png") 
grid.draw(g1) 
dev.off() 

png("m2.png") 
grid.draw(g2) 
dev.off() 

enter image description here enter image description here

관련 문제