tamaƱo poner leyenda ggplot como change r ggplot2 shiny

poner - manual ggplot2



Trabajando con valores reactivos y ggplot en brillante (1)

Estoy usando R y brillante para consultar una base de datos SQL. El usuario puede buscar y agregar a un marco de datos reactivos, cuyo resultado se traza en ggplot. Sin embargo, necesito cambiar las columnas de los cuadros de datos reactivos a factores para el trazado. Puedo hacer esto directamente con ggplot ( aes(factor(...), ). Sin embargo, si agrego la opción de cambiar la variable graficada usando una entrada reactiva, debo usar aes_string. Si uso aes_string, no me gustan los aes(factor(...), ,. Aquí hay un ejemplo de trabajo:

Servidor:

# Create example data set.seed(10) MeasurementA <- rnorm(1000, 5, 2) MeasurementB <- rnorm(1000, 5, 2) Wafer <- rep(c(1:100), each=10) ID <- rep(c(101:200), each=10) Batch <- rep(c(1:10), each=100) dd <- data.frame(Batch, Wafer, ID, MeasurementA, MeasurementB) # Create local connection (in reality this will be a connection to a host site) con <- dbConnect(RSQLite::SQLite(), ":memory:") dbWriteTable(con, "dd", dd) query <- function(...) dbGetQuery(con, ...) # Create empty data frames to populate wq = data.frame() sq = data.frame() shinyServer(function(input, output){ # create data frame to store reactive data set from query values <- reactiveValues() values$df <- data.frame() # Action button for first query d <- eventReactive(input$do, { input$wafer }) # First stage of reactive query a <- reactive({ paste("Select ID from dd where Wafer=",d(), sep="") }) wq <- reactive({ query( a() ) }) # Output to confirm query is correct output$que <- renderPrint({ a() }) output$pos <- renderPrint( wq()[1,1] ) # Action button to add results from query to a data frame e <- eventReactive(input$do2, { wq()[1,1] }) b <- reactive({ paste("select Wafer, Batch, MeasurementA, MeasurementB from dd where ID=",e()," Order by ID asc ;", sep="") }) # observe e() so that data is not added until user presses action button observe({ if (!is.null(e())) { sq <- reactive({ query( b() ) }) # add query to reactive data frame values$df <- rbind(isolate(values$df), sq()) } }) # output of results # Without mesurement choice (works) output$boxV <- renderPlot({ ggplot(values$df, aes(factor(Wafer), MeasurementA, fill=factor(Batch))) + geom_boxplot() }) # With measurement choice (doesnt work) #output$boxV <- renderPlot({ #ggplot(values$df, aes_string(factor(''Wafer''), input$char, fill=factor(''Batch''))) + geom_boxplot() #}) })

UI:

library(markdown) shinyUI(fluidPage( titlePanel("Generic grapher"), sidebarLayout( sidebarPanel( numericInput("wafer", label = h3("Input wafer ID:"), value = NULL), actionButton("do", "Search wafer"), actionButton("do2", "Add to data frame"), selectInput("char", label="Boxplot choice:", choices = list("A"="MeasurementA", "B"="MeasurementB"), selected="Von.fwd") ), mainPanel( verbatimTextOutput("que"), verbatimTextOutput("pos"), plotOutput("boxV") ) ) ) )

He añadido código de diagrama de salida tanto para trabajo como para no trabajo (no funciona está comentado).

Ahora, he leído esto ( Formateo de data.frames reactivos en Shiny ) y esto ( R brillante marco de datos reactivos de modificación ) pero estoy confundido. Debido a que estoy usando valores reactivos para almacenar datos, utilizo los valores de código $ df para acceder a los datos ... pero, ¿qué sucede si quiero convertir una columna en un factor para el propósito de arriba? esto no parece funcionar:

new <- reactive(as.factor(values$df$Wafer))

Quizás estoy ladrando el árbol equivocado con esto?


Ok, resolví el problema cambiando el tipo de datos dentro de la consulta en sí:

b <- reactive({ paste("select cast(Wafer as varchar) as Wafer, cast(Batch as varchar) as Batch, MeasurementA, MeasurementB from dd where ID=",e()," Order by ID asc ;", sep="") })

De esa forma no tuve que fastidiar después. Funciona para mí, pero si alguien leyendo esto quiere decirme que es una mala idea, por favor hazlo. Soy nuevo en SQL y R así que por favor corrígeme para que pueda aprender. Gracias