R에서 커널 너비를 변경하는 효과 애니메이션


10

R에 일부 데이터가 있고 목록에 저장되어 있습니다. 생각한다

d <- c(1,2,3,4) 

이것은 내 데이터가 아니지만. 그런 다음 명령을 입력하면

 plot(density(d, kernel="gaussian", width=1))

그런 다음 커널이 표준 표준 인 커널 확률 밀도 추정치를 얻습니다. 1을 다른 숫자로 바꾸면 그림이 바뀝니다.

내가하고 싶은 것은 각 프레임이 플롯 인 비디오 또는 애니메이션을 만드는 것이지만 커널의 대역폭은 프레임마다 다르므로 대역폭 변경의 효과를 보여줍니다. 어떻게해야합니까?

(R에 대해 질문하기에 적절한 장소가 아닌 경우 사과드립니다.)

답변:


11

최종 목표가 무엇인지에 따라 약간 다릅니다.

실시간 데모를위한 빠르고 더러운 핵

Sys.sleep(seconds)루프 seconds사이 에서 사용하면 프레임 사이의 시간 (초)을 나타내는 것이 가능한 옵션입니다. 예상대로 동작 하도록 하려면 호출에서 xlimylim매개 변수 를 설정해야합니다 plot.

다음은 간단한 데모 코드입니다.

# Just a quick test of Sys.sleep() animation

x <- seq(0,2*pi, by=0.01)
y <- sin(x)
n <- 5
pause <- 0.5

ybnds <- quantile(n*y, probs=c(0,1))
x11()

# Draw successively taller sinewaves with a gradually changing color
for( i in 1:n )
{
    plot(x, i*y, type="l", lwd=2, ylim=ybnds, col=topo.colors(2*n)[i])
    Sys.sleep(pause)
}

이것은 특히 X-Windows를 윈도우 시스템으로 사용하는 것이 좋습니다. quartz()불행히도 Mac 이 잘 재생되지 않는 것을 발견했습니다 .

애니메이션 GIF

재배포하거나 웹 페이지 등에 게시 할 수있는 것이 필요한 경우 caTools 패키지 의 write.gif기능을 살펴보십시오 . 도움말을 표시 하면 몇 가지 애니메이션 (Mandelbrot 세트를 사용한 아주 좋은 예)을 포함하여 몇 가지 좋은 예가 제공됩니다.write.gif

여기여기도 참조 하십시오 .

더욱 미세 조정 된 컨트롤 및 더 멋진 애니메이션

애니메이션 꽤있는 모양 패키지. 그러나 나는 그것을 직접 사용하지 않았으므로 실제 권장 사항을 줄 수는 없습니다.

나는 이 패키지 출력의 몇 가지 좋은 예를 볼 그리고 그들은 꽤 좋은 모양. 아마도 "하이라이트"중 하나는 PDF에 애니메이션을 포함시키는 기능입니다.


작동하는 것 같습니다. 나는 주로 가르치는 수업에서 데모에 사용할 빠르고 더러운 해킹을 찾고 있지만 웹 페이지에 게시하는 것이 훨씬 좋습니다.
마이클 루고

석영의 경우 기존 플롯 위에 흰색 사각형을 그린 다음 선을 다시 그리는 것이 더 빠릅니다. tourr:animate_dist이 방법의 예를 참조하십시오 .
hadley

7

한 가지 방법은 Yihui Xie 의 우수한 애니메이션 패키지 를 사용하는 것입니다 . 공개 드롭 박스 계정에 매우 간단한 예제 인 densityplot 을 업로드했습니다 (3 일 후에이 예제를 제거하겠습니다). 이것이 당신이 찾고있는 것입니까?

다음 R 코드를 사용하여 애니메이션을 만들었습니다.

library(animation)
density.ani <- function(){
    i <- 1  
    d <- c(1,2,3,4) 
    while (i <= ani.options("nmax")) {
      plot(density(d, kernel="gaussian", bw = i), ylim = c(0, 0.25))
      ani.pause()
      i <- i + 1
    }
}

saveHTML({
par(mar = c(5, 4, 1, 0.5))
density.ani()
}, nmax = 30, title = "Changing kernel width")

5

완벽을 기하기 위해 클래스 데모에 필요한 경우 RStudiomanipulate 와 함께 제공 되는 패키지에 대해서도 언급 하겠습니다 . 이 패키지는 RStudio 인터페이스에 의존하므로 외부에서는 작동하지 않습니다.

manipulate플롯의 모든 요소를 ​​조작하기 위해 슬라이더를 빠르게 만들 수 있기 때문에 매우 멋집니다. 이를 통해 수업에서 쉽고 실시간으로 시연 할 수 있습니다.

manipulate(
  plot(density(1:10, bw)),
  bw = slider(0, 10, step = 0.1, initial = 1)) 

다른 예 여기


4

다른 접근 방식은 다음과 같습니다.

library(TeachingDemos)

d <- c(1,2,3,4)

tmpfun <- function(width=1, kernel='gaussian'){
    plot(density(d, width=width, kernel=kernel))
}

tmplst <- list( width=list('slider', init=1, from=.5, to=5, resolution=.1),
    kernel=list('radiobuttons', init='gaussian', values=c('gaussian',
        "epanechnikov","rectangular","triangular","biweight","cosine",
        "optcosine")))

tkexamp( tmpfun, tmplst, plotloc='left' )
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.