2011-10-22 2 views
6

geom_smooth 큰 편으로 많은 편차가 있기 때문에 큰 부분입니다. 그러나이 때문에 축소 한 경우 x 축의 변화량을 확인하기가 어렵습니다. 나는 ggplot2을 확대 할 필요가있는 약 1000 개의 그래프를 생성하고 있는데, 이는 coord_cartesian을 통해 확대됩니다. 그러나 각 그래프에는 다른 줌 한계가 있습니다. 부드러운 물체에 맞게 확대 할 수있는 방법이 있습니까? ggplot2? 나는 geom_smooth 라인과 geom_smooth 라인 및 SE 음영 영역 모두 확대를위한 솔루션에 관심이 있습니다.ggplot2 - 자동으로 (coord_cartesian을 사용하여) geom_smooth 확대/축소

예를 들어, 나는이를 돌 수 있었다 방법을 아는에 관심이있을 것입니다 : 이런 식으로 뭔가에

ggplot(data=mtcars, aes(y=qsec,x=wt)) + geom_point() + geom_smooth() 

:

ggplot(data=mtcars, aes(y=qsec,x=wt)) + geom_point() + geom_smooth() + coord_cartesian(ylim = c(15,20)) 

명시 적으로 한계를 지정하지 않고.

+1

현재 버전 (0.89)에서는 불가능합니다. 다음 버전에서는 드로잉이 계산 된 범위에 맞춰 지므로'ggplot (data = mtcars, aes (y = qsec, x = wt)) + geom_smooth()'를 자동으로 실행하면됩니다. – kohske

+0

고마워요, @ kohske! 답변으로 댓글을 달아 주시면 받아 들일 것입니다 (문제가되지는 않지만 시청자가 쉽게 이용할 수 있습니다). 이 기능을 개발 버전에서 사용할 수 있습니까? –

+0

새로운 버전을 기대합니다! –

답변

7

수동으로 스무딩 모델을 피팅하면이 유형 및 다른 유형의 맞춤 설정을 훨씬 더 유연하게 수행 할 수 있습니다. 대부분의 프로젝트에서 인라인 인터페이스를 사용하기 시작하지만, 다른 조정이 필요할 때 일반적으로 수동 계산으로 전환해야합니다.

해들리의 책에서 §9.1.1을 참조하십시오. 그러나

enter image description here

require(ggplot2) 

# Fit smooth manually 
fit = loess(qsec ~ wt, data=mtcars) 
newx = data.frame(wt=with(mtcars, seq(min(wt), max(wt), len=100))) 
pred = predict(fit, newdata=newx, se=T) 
pred = cbind(wt=newx, qsec=pred$fit, se=pred$se.fit) 

# Calculate limits based on extent of smooth geom 
ylims = with(pred, c(floor(min(qsec-se)), ceiling(max(qsec+se)))) 

# Plot 
dev.new(width=5, height=4) 
ggplot(data=mtcars, aes(y=qsec, x=wt)) + 
    geom_point() + 
    geom_smooth(aes(ymax=qsec+se, ymin=qsec-se), data=pred, stat='identity') + 
    coord_cartesian(ylim = ylims) 

,이 경우에만 지정할 수 있기 때문에 여전히 예를 들어, scales='free'를 들어,면 작동하지 않습니다, 직접하지 실제 한계.

+0

쿨, 고마워! 나는 패싯을 함께 결합시켜야 할 수도 있습니다. 나는 다음 버전에서 이것이 어떻게 향상되는지 보는 것에 관심을 가질 것이다. –