2016-05-24 6 views
1

Ich habe ein GGVIS-Diagramm in meiner glänzenden App, deren Titel ich möchte mit der Benutzereingabe interaktiv sein.einen Haupttitel in ggvis Diagramm interaktiv machen mit Shiny Eingabe

nach diesem Beitrag: Add a plot title to ggvis, konnte ich einen Titel zu meinem Diagramm hinzufügen, aber anscheinend interaktiv zu machen ist nicht so einfach wie ich dachte.

unten ist das minimale reproduzierbare Beispiel.

library(shiny) 
library(ggvis) 

example <- data.frame(a=c("apple", "pineapple", "grape", "peach"), b=11:14) 

ui <- fluidPage (
    selectInput(inputId="option", 
       label=NULL, 
       choices= levels(example$a), 
       selected="apple"), 
    ggvisOutput("chart") 
) 

server <- function(input, output) { 
    dataTable <- reactive({ 
     df <- example[example$a==input$option, ] 
     df 
    }) 

    ggvis(data=dataTable, x=~a, y=~b) %>% 
     layer_bars() %>% 
     add_axis("x", title="fruits") %>% 
     add_axis("x", orient = "top", ticks = 0, title = "???", #I want: paste("chosen option is", input$option), 
       properties = axis_props(
        axis = list(stroke = "white"), 
        labels = list(fontSize = 0))) %>% 
     bind_shiny("chart") 
} 

shinyApp(ui=ui, server=server) 

Vielen Dank für Ihre Hilfe.

+0

Sie können den Titel so wie Sie wollen mit Paste einfügen. Allerdings müssen Sie den 'ggvis'-Teil von' ggivs (... 'durch das' bind_shiny' in einem 'observe ({})} umhüllen, damit dies funktioniert. \ R \ n –

+0

Ich verstehe nicht. Könnten Sie ein Skelett zur Verfügung stellen von Code? Ich habe nicht beobachtet() in Shiny noch ... auch, wissen Sie, warum dies wirft Fehler ist? – chungkim271

Antwort

1

für Ihren Server, dies zu tun:

server <- function(input, output) { 
    dataTable <- reactive({ 
     df <- example[example$a==input$option, ] 
     df 
    }) 
    observe({ 
     ggvis(data=dataTable, x=~a, y=~b) %>% 
     layer_bars() %>% 
     add_axis("x", title="fruits") %>% 
     add_axis("x", orient = "top", ticks = 0, 
       title = paste("chosen option is", input$option), 
       properties = axis_props(
        axis = list(stroke = "white"), 
        labels = list(fontSize = 0))) %>% 
     bind_shiny("chart") 
    }) 
} 

Die observe setzt das alles in einem "reaktiven Kontext", die Sie input$option in Ihrem Grundstück zu nutzen. Ohne die observe shiny versteht nicht, wie Sie mit der Reaktivität in Ihrer Handlung umgehen.

+0

extra Dank der Erklärung! – chungkim271

+0

der Code nicht mit add_axis ("x", orient = "top", ticks = 0, title = dataTable() $ a [1], das erscheint mir seltsam, denn dataTable() $ a [1] ist eine feste Zeichenkette, sobald sie die reaktive Funktion durchläuft auch versucht mit DataTable $ a [1] vergebens) – chungkim271

Verwandte Themen