Shiny: Übergabe der Eingabe $ var an aes () in ggplot2
Ich versuche, eine Shiny-App zu schreiben, die die Dichte einer Variablen VAL nach Alters- (AGE) oder Geschlechtskategorien (SEX) grafisch darstellt. Der Benutzer wählt "SEX" oder "AGE" im Dropdown-Menü, und ich habe versucht, @ zu verwendfill = input$Group_select
in ggplot und ggvis.
In ggplot:
output$plot <- renderPlot(ggplot(gdat[gdat$GFR==input$GFR_select,]) +
aes(x= VAL, fill=input$Group_select) +
geom_density(adjust=input$slider1))
EDIT: Wie Docendo betonte, kann dies für ggplot mit aes_string behoben werden:
output$plot <- renderPlot(ggplot(gdat[gdat$GFR==input$GFR_select,]) +
aes(x= VAL) +
geom_density(adjust=input$slider1, aes_string(fill=input$Group_select))):
In ggvis:
gvis <- reactive(subset(gdat, GFR==input$GFR_select) %>%
ggvis(x = ~VAL) %>% group_by_(input$Group_select) %>%
layer_densities(adjust = input$slider1) %>%
add_axis("y", title = "Density", ticks="none") %>%
scale_numeric("x", domain = c(0, 230)) )
gvis %>% bind_shiny("ggvis", "ggvis_ui")
LÖSUNG: Wenn Sie as.name (Eingabe $ Group_select) verwenden, wird das Diagramm ordnungsgemäß gerendert!
Dies ist (war) was gerendert wird:Imgur Link zu glänzender Ausgabe. Interessanterweise scheint group_by_ die Eingabe $ Group_select korrekt zu interpretieren, während die Eingabe $ Group_select in @ als Konstante behandelt wirfill=input$Group_select
Haben Sie eine Idee, wie ich die Diagramme korrekt rendern kann?
Hier ist der vollständige Shiny-Code:
ui.R
library(shiny)
library(ggplot2)
library(dplyr)
library(ggvis)
shinyUI(fluidPage(
titlePanel("eGFR in the ARIC study"),
sidebarPanel(
selectInput("Group_select",
label=h3("By-Variable"),
choices=c("AGE","SEX","ALL"),
selected="SEX"),
selectInput("GFR_select",
label=h3("Creatinine Measure"),
choices=c("BOTH", "CREATININE", "CYSTATIN", "MDRD"),
selected="MDRD"),
sliderInput("slider1", label = h3("Bandwith Adjustment"),
min = 0.5, max = 4, value = 1)
),
mainPanel(
uiOutput("ggvis_ui"),
ggvisOutput("ggvis"),
plotOutput("plot")
)
))
server.R
library(shiny)
source("helpers.R")
shinyServer(function(input, output) {
gvis <- reactive(subset(gdat, GFR==input$GFR_select) %>%
ggvis(x = ~VAL, fill = ~input$Group_select) %>% group_by_(input$Group_select) %>%
layer_densities(adjust = input$slider1) %>%
add_axis("y", title = "Density", ticks="none") %>%
scale_numeric("x", domain = c(0, 230)) )
gvis %>% bind_shiny("ggvis", "ggvis_ui")
output$plot <- renderPlot(ggplot(gdat[gdat$GFR==input$GFR_select,]) +
aes(x= VAL, fill=input$Group_select) +
geom_density(adjust=input$slider1))
})