2014-11-21 17 views
5

Sto cercando di realizzare alcune demo per la mia classe stat. Tra le altre cose voglio mostrare il processo passo dopo passo. Per un esempio semplificato di quello che sto cercando di prendere in considerazione la seguente funzione poco giocattolo R:Come aggiungere parti al grafico una ad una in lucido

toyPlot <- function() { 
    x <- 1:100/100 
    y <- x+rnorm(100,0,0.2) 
    plot(x,y) 
    Sys.sleep(2) 
    abline(lm(y~x)) 
    Sys.sleep(2) 
    title(main="Fitted Line Plot") 
} 

Si disegna un grafico a dispersione, aspetta due secondi, aggiunge la linea di LSR, attende due secondi e poi aggiunge il titolo.

Ora, quando faccio lo stesso in modo lucido, attende i 4 secondi completi e quindi esegue il grafico in una sola volta.

Ho passato un po 'di tempo a cercare una soluzione e ho trovato un numero di comandi che sembravano utili (session $ onFlushed, invalidateLater, reactiveTimer) ma non riesco a far sì che nessuno di loro faccia ciò che voglio.

+1

E 'cruciale a causa di questo dopo un certo periodo di tempo? O potresti semplicemente attivare e disattivare parti di un grafico a piacimento? –

risposta

4

Perché non collegare l'output del grafico al valore di un cursore di animazione? Puoi controllare la durata di ogni fase con animationOptions.

ui <- fixedPage(
    plotOutput('myplot'), 
    sliderInput('myslider', 'Steps', min=1, max=3, value=1, animate=animationOptions()) 
) 


server <- function(input, output, session) { 

    x <- 1:100/100 
    y <- x + rnorm(100, 0, 0.2) 

    pfs <- list(
     function() plot(x, y) , 
     function() abline(lm(y~x)), 
     function() title(main='Fitted line plot') 
    ) 

    output$myplot <- renderPlot({ 
     for (i in 1:input$myslider) pfs[[i]]() 
    }) 

} 

runApp(list(ui=ui, server=server)) 
+0

Bella risposta ... :) – jdharrison

+0

Questo è esattamente ciò di cui avevo bisogno. Grazie! –

0

Ecco un modo per farlo presupponendo che attivare e disattivare gli elementi sia accettabile. Nel tuo ui.r dovresti aggiungere un controllo (per ora è il chekcboxInput) che attiva e disattiva gli elementi. Il codice sarebbe

checkboxInput(inputId="lineCheck", label = "Show line?", value =FALSE), 

checkboxInput(inputId="titleCheck", label = "Show title?", value =FALSE), 

La tua uscita trama sarebbe:

toyPlot <- renderPlot({ 
    x <- 1:100/100 
    y <- x+rnorm(100,0,0.2) 
    plot(x,y) 
    if(input$lineCheck){ abline(lm(y~x))} 
    if(input$titleCheck){ title(main="Fitted Line Plot")} 
} 

È possibile aggiungere dispositivi di scorrimento per gli intervalli per gli assi, menu a discesa per le scelte di colore, simboli ecc ecc

Problemi correlati