2016-11-23 92 views
-1

我想在viewport上畫一個圓,但我得到的唯一輸出是文本。我的最終目標是在情節之上畫一個圓圈。這是我的代碼:R(閃亮)grid.circle和視口輸出文本只有

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) 

但我得到的唯一輸出是:

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 

換句話說,在grid.circleviewport沒有得出任何對象,他們只是輸出它們的屬性。

回答

0

我終於明白了;通過在觀察者事件內的renderPlot方法中繪製圓和繪圖:

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)