2016-11-23 5 views
-1

Ich versuche, einen Kreis auf eine viewport zu zeichnen, aber die einzige Ausgabe, die ich bekomme, ist Text. Mein ultimatives Ziel wäre es, einen Kreis auf einem Grundstück zu zeichnen. Dies ist mein Code:R (Glänzend) grid.circle und Ansichtsfensterausgabe nur Text

library(reshape) 
library(grid) 

ui <- fluidPage(
    titlePanel("The Bomb Problem"), 
    fluidRow(
    column(2, numericInput("numberOfPoints", "Number Of Points:", 0)), 
    column(2, numericInput("radius", "Radius:", 0.5, min = 0, max = 1)), 
    column(2, actionButton("btnRun", "Run")) 

), 
    mainPanel(
    vp <- viewport(x=0.5,y=0.5,width=0.9, height=0.9), 
    pushViewport(vp), 
    plotOutput(outputId = "points", width = "100%"), 
    grid.circle(x=0.6, y=0.4, r=0.3, draw = TRUE) 
) 
) 
server <- function(input, output) { 
    observeEvent(input$btnRun, { 
    x<-sample(0:input$numberOfPoints, input$numberOfPoints, rep=TRUE) 
    y<-sample(0:input$numberOfPoints, input$numberOfPoints, rep=TRUE) 
    output$points <- renderPlot(plot(x, y), height = 800, width = 800) 
    df <- melt(data.frame(x,y)) 
    }) 
} 
shinyApp(ui, server) 

Aber der einzige Ausgang ich erhalte, ist:

0.5npc 0.5npc 0.9npc 0.9npc centre FALSE 0 0 0 0.5 GRID.VP.13 

0.6npc 0.4npc 0.3npc GRID.circle.10 

Mit anderen Worten, die grid.circle und viewport sind keine Objekte zeichnen, sie ihre Eigenschaften nur ausgegeben.

Antwort

0

Ich habe es endlich herausgefunden; indem Sie sowohl den Kreis als auch das Plot in der renderPlot-Methode in observerEvent ausgeben:

require(plotrix) 
require(grid) 
require(reshape) 

ui <- fluidPage(
    titlePanel("The Bomb Problem"), 
    fluidRow(
    column(2, numericInput("numberOfPoints", "Number Of Points:", 0)), 
    column(2, numericInput("radius", "Radius:", 0.5, min = 0, max = 1)), 
    column(2, actionButton("btnRun", "Run")) 

), 
    mainPanel(
    plotOutput(outputId = "points", width = "100%") 
) 
) 
server <- function(input, output) { 
    observeEvent(input$btnRun, { 
    x<-sample(0:input$numberOfPoints, input$numberOfPoints, rep=TRUE) 
    y<-sample(0:input$numberOfPoints, input$numberOfPoints, rep=TRUE) 
    output$points <- renderPlot({ 
     plot(x, y) 
     draw.circle(0.5, 0.5, (input$numberOfPoints/2) * input$radius, nv = 1000, border = NULL, col = NA, lty = 1, lwd = 0.5) 
    }, height = 800, width = 800) 
    df <- melt(data.frame(x,y)) 

    }) 
} 
shinyApp(ui, server)