2017-03-08 1 views
1

Ich versuche, eine glänzende App zum Nachspielen eines 6-seitigen Würfels aufzubauen. a haben 2 Aktionsknöpfe. und ich möchte implementieren, dass jeder Klick auf die Schaltfläche für die Neuberechnung eine weitere Wahrscheinlichkeitslinie auf dem SAME (!!) Plot hinzufügen wird.Interaktives Plot

jeder probabilityline sollte in einer anderen Farbe sein (also, wenn Sie auf sie 30-mal klicken, werden Sie 30 verschiedenen farbigen problines der 6 als Ergebnis sehen)

mit der Restart-Taste können Sie alle gedruckten Diagramme löschen in Die Handlung kann man von Anfang an versuchen (also wenn eine Zeile gedruckt ist, könnte auch ok sein).

Hier wird waht i bisher erstellt haben:

library(ggplot2) 
library(ggthemes) 
library(extrafont) 

ui <- fluidPage(

# Application title 
titlePanel("Roll the dice"), 

# Sidebar with a go_button and a restart_button 
sidebarLayout(
sidebarPanel(
    actionButton("reroll", 
       "ReRoll the dice", 
       width = "100%"), 
    br(), 
    br(), 

    actionButton("restart", 
       "Restart", 
       width = "100%") 
), 

# Show a plot 
mainPanel(
    plotOutput("plot") 
) 
) 
) 

server <- function(input, output) { 

output$plot <- renderPlot({ 

input$reroll 

a <- 1:6 
b <- 1:1000 
eyes <- sample(a,1000,replace=T) 
six <- eyes == 6 
c <- cumsum(six)/1:1000 
df <- data.frame(b , c) 


gl <- geom_line(aes(x = b , y = c), size = 0.9, linetype="dashed", colour = "red", alpha = 0.5) 

p <- ggplot(data = df) + 
     xlim(0, 1000) + 
     ylim(0, 1) + 
     labs(x="Number of Throws", y="Probability of 6") + 
     ggtitle("Approximation of Diceprobability") + 

     theme_fivethirtyeight() + scale_colour_fivethirtyeight() + 
     theme(axis.title = element_text(family="Atlas Grotesk Regular"), 
       legend.position="bottom", legend.direction="horizontal", 
       legend.title=element_blank(), 
       plot.title=element_text(family="Atlas Grotesk Medium"), 
       legend.text=element_text(family="Atlas Grotesk Regular"), 
       text=element_text(family="DecimaMonoPro")) 

p + gl 

}) 
} 

shinyApp(ui=ui, server = server) 

Fragen:

  1. Wie ich verschiedene Linien in der gleichen Plot plotten können (Sie wissen schon ... click i 30mal eine es baut 30 Linien in der gleichen Handlung)

  2. Wie kann ich es programmieren, dass jede Linie eine andere Farbe hat?

  3. Wie kann ich es mit meinem Neustart-Knopf "löschen" und kann einen anderen Versuch haben?

würde ich für jede Hilfe :-)

Dank dort gerne viel.

Antwort

0

Ich bin nicht sicher, was Sie versuchen, über alle acheive, aber:

  1. Um einen Plot aktualisiere ich einen Blindwert gesetzt würde, die Ihr Grundstück Objekt enthält. Ich würde dann verwenden und beobachtenEvento nach einem Tastendruck zu beobachten. In diesem Ereignis fügen Sie Ihre neue Zeile hinzu.

  2. Sie könnten dann ein observeEvent für Ihre andere Schaltfläche erstellen, um Ihr Plotobjekt durch ein leeres Plot zu ersetzen.

1
  • Verwenden observeEvent die Tasten triggern.
  • Verwenden Sie reactiveValues, um das Diagramm und einen Zähler für die Farben zu speichern.
  • Verwenden Sie diese Farbskala nicht, da sie nur drei Farben hat.

Halten ui wie es ist, dann server machen:

server <- function(input, output) { 
    # start plot 
    p_blank <- ggplot() + 
    xlim(0, 1000) + 
    ylim(0, 1) + 
    labs(x="Number of Throws", y="Probability of 6") + 
    ggtitle("Approximation of Diceprobability") + 
    theme_fivethirtyeight() + 
    theme(legend.position="bottom", legend.direction="horizontal", 
      legend.title=element_blank()) 

    #reactive values 
    reac <- reactiveValues() 
    reac$p_lines <- p_blank 
    reac$counter <- 0 

    # button functionality 
    observeEvent(input$reroll, 
       { 
       input$reroll 
       a <- 1:6 
       b <- 1:1000 
       eyes <- sample(a,1000,replace=T) 
       six <- eyes == 6 
       c <- cumsum(six)/1:1000 
       df <- data.frame(b, c, counter = reac$counter) 
       gl <- geom_line(aes(x = b , y = c, col = factor(counter)), df, 
           size = 0.9, linetype="dashed", alpha = 0.5) 
       reac$p_lines <- reac$p_lines + gl 
       reac$counter <- reac$counter + 1 
       }) 

    observeEvent(input$restart, 
       { 
       reac$p_lines <- p_blank 
       reac$counter <- 0 
       }) 

    # draw the plot 
    output$plot <- renderPlot(reac$p_lines) 
} 

enter image description here

+0

vielen Dank! Das ist, wonach ich gesucht werde !!! Danke :-) –