2014-07-12 2 views
10

두 개가 별도 플롯으로 표시됩니다. 나는 비머 프리젠 테이션의 다른 프레임에서이를 사용하고 있으며 한 라인을 다른 라인에 추가 할 것입니다 (결국 아래 예제는 아님). 따라서 프레젠테이션을 한 슬라이드에서 다음 슬라이드로 "건너 뛰기"("점프")하지 않으려합니다. 그 라인이 자연스럽게 추가되는 것처럼 보이기를 바랍니다. 내가 믿는 아래 코드는 문제를 보여줍니다. 그것은 미묘하지만 두 번째 플롯의 플롯 영역이 첫 번째 플롯보다 약간 큰 것은 아닙니다. 이것은 y 축 레이블 때문에 발생합니다.두 플롯간에 ggplot2의 모든 플롯 구성 요소를 동일한 크기로 유지하십시오.

library(ggplot2) 

dfr1 <- data.frame(
    time = 1:10, 
    value = runif(10) 
) 

dfr2 <- data.frame(
    time = 1:10, 
    value = runif(10, 1000, 1001) 
) 

p1 <- ggplot(dfr1, aes(time, value)) + geom_line() + scale_y_continuous(breaks = NULL) + scale_x_continuous(breaks = NULL) + ylab(expression(hat(z)==hat(gamma)[1]*time+hat(gamma)[4]*time^2)) 
print(p1) 
dev.new() 
p2 <- ggplot(dfr2, aes(time, value)) + geom_line() + scale_y_continuous(breaks = NULL) + scale_x_continuous(breaks = NULL) + ylab(".") 
print(p2) 
I 여러 설정에서이 방법을 사용하기 때문에 I는 수동 축 라벨의 크기를 설정하거나, X 축에 공간을 추가하는 등의 hackish 용액이없는 것을 선호

는 (아래에 하나 개의 기준 참조) 라벨은 언제든지 바뀔 수 있습니다 (저는 재현성이 좋기 때문에 유연한 솔루션을 원합니다).

나는 많이 검색하고있어 다음과 같은 발견 :

Specifying ggplot2 panel width

How can I make consistent-width plots in ggplot (with legends)?

https://groups.google.com/forum/#!topic/ggplot2/2MNoYtX8EEY

How can I add variable size y-axis labels in R with ggplot2 without changing the plot width?

그들은 나를 위해 작동하지 않는, 주로 I 때문에 별도의 플롯이 필요하므로 정렬하는 데 문제가되지 않습니다. 위의 솔루션 중 일부와 같이 사실상 하나의 결합 된 플롯에 있습니다.

답변

8

이 시도하지 않은, 그러나 이것은

gl <- lapply(list(p1,p2), ggplotGrob) 
library(grid) 
widths <- do.call(unit.pmax, lapply(gl, "[[", "widths")) 
heights <- do.call(unit.pmax, lapply(gl, "[[", "heights")) 
lg <- lapply(gl, function(g) {g$widths <- widths; g$heights <- heights; g}) 
grid.newpage() 
grid.draw(lg[[1]]) 
grid.newpage() 
grid.draw(lg[[2]]) 
+0

실제로 작동합니다. 나는 정말 호기심이 많다. 왜 너 자신을 시험해 보지 않았 니? 그 시간은 R에 붙여 넣을 때 5 초라고 상상하지만 R에 접근 할 수 없을 수도 있습니다. 테스트없이 메모리에서 모든 것을 할 수 있었습니까? 어쨌든 당신의 창조적 인 해결책에 감사드립니다. –

2

방법 (P2)이 사용에 대한 :

p2 <- ggplot(dfr2, aes(time, value)) + geom_line() + 
    scale_y_continuous(breaks = NULL) + 
    scale_x_continuous(breaks = NULL) + 
    ylab(expression(hat(z)==hat(gamma)[1]*time+hat(gamma)[4]*time^2)) + 
    theme(axis.title.y=element_text(color=NA)) 

이 P1과 동일한 라벨을 가지고 있지만 표시하지 않도록 색상은 NA입니다. color="white"을 사용할 수도 있습니다.

+0

이 아주 좋은 생각이다, 작동 할 수 있습니다. 고맙습니다. 그러나 p2에 y 레이블이 필요합니다. 나의 예에서는 나는 ylab (".")'을 가지고있다. –

+0

https://groups.google.com/forum/#!topic/ggplot2/s5Euy1orwLY에서 응답을 적용하려했지만 적응에 실패했습니다. –

관련 문제