R'de çekirdek genişliğini değiştirmenin etkisini canlandırma


10

Bir listede depolanan bazı veriler var, R. düşünmek

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

bu benim verilerim olmasa da. Eğer komutu girersem

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

o zaman çekirdeğin standart normal olduğu çekirdek olasılık yoğunluk tahminini alıyorum. 1'i başka numaralarla değiştirirsem, elbette resim değişir.

Yapmak istediğim, her karenin böyle bir çizim olduğu bir video veya animasyon oluşturmak, ancak çekirdeğin bant genişliği çerçeveden çerçeveye değişiyor, böylece bant genişliğini değiştirmenin etkisini gösteriyor. Bunu nasıl yapabilirim?

(R hakkında soru sormak için doğru yer değilse özür dilerim.)

Yanıtlar:


11

Biraz son hedefinizin ne olduğuna bağlı.

Gerçek zamanlı gösteriler için hızlı ve kirli saldırı

Kareler arasındaki saniye sayısını gösteren Sys.sleep(seconds)bir döngüde kullanmak secondsuygun bir seçenektir. İşlerin beklendiği gibi davranmasını sağlamak için çağrınızdaki xlimve ylimparametrelerini ayarlamanız gerekir plot.

İşte bazı basit gösteri kodu.

# 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)
}

Bu, özellikle pencere sistemi olarak X-Windows kullanarak oldukça iyi çalışıyor. quartz()Maalesef Mac'lerin hoş oynamadığını gördüm .

Hareketli GIF'ler

Yeniden dağıtılabilecek, bir web sayfasında yayınlanabilecek vb. Bir şeye ihtiyacınız varsa write.gif, caTools paketindeki işleve bakın . Yardımı görüntülemek write.gif, Mandelbrot setini kullanarak oldukça güzel bir örnek içeren birkaç animasyon da dahil olmak üzere birkaç güzel örnek verir.

Buraya ve buraya da bakınız .

Daha hassas ayarlanmış kontrol ve meraklı animasyonlar

Oldukça yetenekli görünen bir animasyon paketi var. Yine de kendim kullanmadım, bu yüzden her iki şekilde de gerçek tavsiyeler veremem.

Ben var bu paketten çıktı birkaç iyi örnek gördük ve bunlar oldukça güzel görünüyorlar. Belki de "önemli noktalardan" biri, bir animasyonu PDF'ye gömme yeteneğidir.


İşe yarıyor gibi görünüyor. Çoğunlukla öğrettiğim bir sınıfta gösteriler için kullanmak için hızlı ve kirli bir kesmek arıyorum, ancak bir web sayfasına daha iyi gönderebilirsem.
Michael Lugo

Kuvars için, mevcut arsa üzerine beyaz bir dikdörtgen çizmek ve daha sonra çizgileri yeniden çizmek daha hızlıdır. tourr:animate_distBu yaklaşımın bir örneği için bakınız .
hadley

7

Gitmenin bir yolu, Yihui Xie'nin mükemmel animasyon paketini kullanmaktır . Genel dropbox hesabıma çok basit bir örnek yükledim: densityplot (bu örneği 3 gün içinde kaldıracağım). Aradığınız bu mu?

Animasyon aşağıdaki R kodu kullanılarak oluşturuldu:

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

Sadece bir bütünlük uğruna, eğer bir sınıf gösterisi için buna ihtiyacınız varsa manipulate, RStudio ile birlikte gelen paketten de bahsedeceğim . Bu paketin RStudio arabirimine bağlı olduğunu unutmayın, bu nedenle bunun dışında çalışmaz.

manipulategrafikteki herhangi bir öğeyi manipüle etmek için hızlı bir şekilde bazı kaydırıcılar oluşturmaya izin verdiği için oldukça havalıdır. Bu , sınıfta kolay ve gerçek zamanlı bir gösteri yapılmasına izin verecektir .

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

Buradaki diğer örnekler


4

İşte başka bir yaklaşım:

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' )
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.