आर में कर्नेल चौड़ाई को बदलने के प्रभाव को एनिमेट करना


10

मेरे पास R में कुछ डेटा है, जो एक सूची में संग्रहीत है। सोच

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

हालांकि यह मेरा डेटा नहीं है। अगर मैं फिर कमांड दर्ज करता हूं

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

तब मुझे कर्नेल संभाव्यता घनत्व अनुमान मिलता है, जहां कर्नेल मानक सामान्य है। यदि मैं 1 को अन्य नंबरों से बदल देता हूं, तो निश्चित रूप से तस्वीर बदल जाती है।

मैं जो करना चाहता हूं वह एक वीडियो या एनीमेशन बनाना है जिसमें प्रत्येक फ्रेम एक ऐसा प्लॉट है, लेकिन कर्नेल की बैंडविड्थ फ्रेम से फ्रेम में भिन्न होती है, जिससे बैंडविड्थ बदलने का प्रभाव दिखाई देता है। मैं यह कैसे कर सकता हूँ?

(आर के बारे में सवाल पूछने के लिए यह सही जगह नहीं है तो मेरी माफी।)

जवाबों:


11

यह थोड़ा सा निर्भर करता है कि आपका अंतिम लक्ष्य क्या है।

वास्तविक समय के प्रदर्शनों के लिए त्वरित और गंदे हैक

Sys.sleep(seconds)एक लूप में उपयोग करना जहां secondsफ़्रेम के बीच सेकंड की संख्या इंगित करता है एक व्यवहार्य विकल्प है। अपेक्षा के अनुसार व्यवहार करने के लिए आपको अपने कॉल में xlimऔर ylimपैरामीटर सेट करने की आवश्यकता 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)
}

यह बहुत अच्छी तरह से काम करता है, विशेष रूप से विंडो सिस्टम के रूप में एक्स-विंडोज का उपयोग कर रहा है। मैंने पाया है कि मैक quartz()अच्छा नहीं खेलता है, दुर्भाग्य से।

एनिमेटेड GIF

यदि आपको ऐसी कोई चीज़ चाहिए, जिसे पुनर्वितरित किया जा सके, जिसे वेबपृष्ठ पर पोस्ट किया जाए, आदि, caTools पैकेज write.gifमें फ़ंक्शन देखें । मदद पर प्रदर्शित करने से कई अच्छे उदाहरण मिलते हैं, जिसमें एनिमेशन के एक जोड़े को शामिल किया गया है - मैंडलब्रॉट सेट का उपयोग करके एक बहुत अच्छा उदाहरण है।write.gif

यहाँ और यहाँ भी देखें ।

अधिक ठीक-ठीक नियंत्रण और कट्टर एनिमेशन

एक एनीमेशन पैकेज है जो काफी सक्षम दिखता है। हालाँकि, मैंने खुद इसका उपयोग नहीं किया है, इसलिए मैं किसी भी तरह से कोई वास्तविक सिफारिश नहीं दे सकता।

मैं है इस पैकेज से उत्पादन के कुछ अच्छे उदाहरण देखा है और वे बहुत अच्छे लग रहे। शायद "हाइलाइट" में से एक पीडीएफ में एक एनीमेशन एम्बेड करने की क्षमता है।


वह काम करने लगता है। मैं ज्यादातर एक त्वरित और गंदे हैक की तलाश में हूँ जो मैं पढ़ा रहा हूँ एक कक्षा में प्रदर्शनों के लिए उपयोग करने के लिए, लेकिन अगर मैं इसे एक वेबपेज पर पोस्ट कर सकता हूं तो बेहतर होगा।
माइकल लुगो

क्वार्ट्ज के लिए, मौजूदा भूखंड पर एक सफेद आयत खींचना और फिर बस लाइनों को फिर से बनाना तेज है। tourr:animate_distइस दृष्टिकोण का एक उदाहरण देखें ।
हैडले

7

जाने के लिए एक रास्ता Yihui Xie द्वारा उत्कृष्ट एनीमेशन पैकेज का उपयोग करना है । मैंने अपने सार्वजनिक ड्रॉपबॉक्स खाते में एक बहुत ही सरल उदाहरण अपलोड किया है: घनत्वप्लॉट (मैं 3 दिनों में इस उदाहरण को हटा दूंगा)। क्या यह वही है जिसको तुम खोज रहे हो?

निम्नलिखित आर कोड का उपयोग करके एनीमेशन बनाया गया था:

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

पूर्णता के लिए, यदि आपको एक वर्ग प्रदर्शन के लिए इसकी आवश्यकता है, तो मैं उस manipulateपैकेज का भी उल्लेख करूंगा जो RStudio के साथ आता है । ध्यान दें कि यह पैकेज 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' )
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.