2017-02-22 2 views
0

Ich möchte ggplot aktualisieren. Hier habe ich die Plotfunktion benutzt, aber stattdessen möchte ich ggplot verwenden, das automatisch aktualisiert wird. GGplot wird automatisch mit selectsizeinput aktualisiert. Wie geht das ?? Danke im Voraus. HierWie Ggplot mit Selectsize-Eingabe in R aktualisiert wird glänzend

ui.r 
library(shiny) 

shinyUI(fluidPage(
    titlePanel("Multivariable plot"), 

    sidebarLayout(
    sidebarPanel(
     fileInput("file", label = h3("Select CSV File")), 
     checkboxInput(inputId = 'header', label = 'col names', value = TRUE), 
     radioButtons(inputId = 'sep', label = 'Seperator', choices = c("comma"=',',"semi comma"=';'), selected = ','), 

     #checkboxGroupInput("choices1", label = h3("Wybierz Kolumny"), choices = NULL), 
     # there is combobox to pick column 
     selectInput("combobox", label = h3("x var"),choices = NULL), 
    #selectInput("combobox1", label = h3("y var"),choices = NULL) 
    selectizeInput("combobox1", label = h3("y var"), choices = NULL ,multiple = TRUE) 

    ), 

    mainPanel(
     uiOutput("tb") 
    ) 
) 
)) 
server.r 

function(input, output, session){ 

    data <- reactive({ 
    file1 <- input$file 
    if(is.null(file1)){return()} 
    dataSet <- read.csv(file=file1$datapath, sep=input$sep, header = input$header) 

    #updateCheckboxGroupInput(session, "choices1", choices = colnames(dataSet)) 
    # this line updates selection in combobox 
    updateSelectInput(session, "combobox", choices = colnames(dataSet)) 
    updateSelectizeInput(session, "combobox1", choices = colnames(dataSet), server = TRUE) 
    dataSet 
    }) 

    output$table <- renderTable({ 
    if(is.null(data())){return()} 
    data()  
    }) 

    output$multivarplot <- reactivePlot(function(){ 
    x <- data()[, input$combobox] 
    ydat <- data.frame(data()[, input$combobox1]) 

    xval<-data.frame(x,ydat) 
    # ggplot(xval, aes(x = reorder(x, -x), y = y))+geom_point(colour='red') 
    #g= ggplot(xval, aes(x,ydat[,1]))+geom_point(colour='red') 

    ny <- ncol(ydat) 
     par(mfcol=c(12,12),mfrow=c(1,1)) 

     if(ny==1) 
      plot.default(x,ydat[,1],xaxt="n",col="blue") 
    axis(1, at=1:length(xval$x),labels = xval$x) 
if  (ny==2) 
     { y1 <- ydat[,1] 
     y2 <- ydat[,2] 
    plot.default(x, y1, ylim = range(c(y1,y2)),col='red') 
     points(x,y2)} 

    }) 


    output$tb <- renderUI({ 
     tabsetPanel(tabPanel("Table", tableOutput("table")), 

        tabPanel("Plot", 
          plotOutput("multivarplot"))) 
    }) 
} 
+0

Bitte geben Sie ein minimales Beispiel für die Wiedergabe des Verhaltens, das Sie nicht mögen, und geben Sie detaillierte Erwartungen. – HubertL

Antwort

0

ist ein Beispiel für eine ggplot, die die Basis-Updates auf selectInput und SelectizeInput. Soweit ich verstehe, möchten Sie mehr als eine Variable auf der Y-Achse plotten, also habe ich data.table bis melt die Daten in eine data.table mit drei Spalten (x_var, variable, value), d. H. Zu einem langen Format. Diese Transformation (und alle anderen Berechnungen) könnte/sollte in die reaktive data()-Funktion verschoben werden.

library(shiny) 
library(ggplot2) 
library(data.table) 

ui <- shinyUI(fluidPage(
    titlePanel("Multivariable plot"), 
    sidebarLayout(
    sidebarPanel(
     fileInput("file", label = h3("Select CSV File")), 
     checkboxInput(inputId = 'header', label = 'col names', value = TRUE), 
     radioButtons(inputId = 'sep', label = 'Seperator', 
     choices = c("comma"=',',"semi comma"=';'), selected = ','), 
     selectInput("combobox", label = h3("x var"), choices = NULL), 
     selectizeInput("combobox1", label = h3("y var"), choices = NULL, 
     multiple = TRUE) 
    ), 
    mainPanel(
     tabsetPanel(tabPanel("Table", tableOutput("table")), 
        tabPanel("Plot", plotOutput("multivarplot"))) 
    ) 
) 
)) 

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

    data <- reactive({ 
    file1 <- input$file 
    if(is.null(file1)){return()} 
    dataSet <- read.csv(file=file1$datapath, sep=input$sep, 
     header = input$header) 
    updateSelectInput(session, "combobox", choices = colnames(dataSet)) 
    updateSelectizeInput(session, "combobox1", choices = colnames(dataSet), 
     server = TRUE) 
    dataSet 
    }) 

    output$table <- renderTable({ 
    data()  
    }) 

    output$multivarplot <- renderPlot({ 
    dt <- data.table(data()) 
    x_var <- input$combobox 
    y_var <- input$combobox1 
    if (!is.null(x_var) & !is.null(y_var)) { 
     dt_melt <- melt(dt, id.vars = x_var, measure.vars = y_var) 
     ggplot(dt_melt, aes_string(x = x_var, y = "value", group = "variable", 
          colour = "variable")) + geom_point(size = 3) 
    } 
    }) 
} 

shinyApp(ui = ui, server = server)