2016-05-02 19 views
10

Tworzę prosty wykres liniowy, który renderuje się poprawnie w Shiny.Zmianę wykresu Y na podstawie selectInput

Dodałem teraz selectInput z nazwami 2 różnych miar, zapisanych tak, jak pojawiają się w moim zbiorze danych. Chciałbym zmienić odpowiednio moją zmienną y.

p <- plot_ly(data = LineChartData(), x= Calendar.Month, y = input$Measure, type = "line", group = Calendar.Year, col = Calendar.Year) 

Niestety wykres renderuje tylko z jednym punktem. To nie bierze input $ Measure i znajduje to pole w moim zbiorze danych.

Wiem, że przy użyciu ggplot, przełączałbym moje aes na aes_string. Czy istnieje podobne rozwiązanie w spiskach?

EDIT: oto niektóre powtarzalne kod

oto ui.R złożyć

#ui.R 

shinyUI(
    fluidPage(
    titlePanel("Inbound Intermediary Performance"), 

    sidebarLayout(
    sidebarPanel(
    h4("Parameters"), 
    br(), 
    selectInput("Measure", "Measure", c("Var1","Var2")) 
    ), 
    mainPanel(

     plotlyOutput("lineChart") 

    ) 

) 

     ) 

) 

server.R

#server.R 
library(plotly) 
library(shiny) 
library(ggplot2) 





#Create data 
data <- data.frame(Month = c(1,2,3,4,5,6,7,8,9,10,11,12), Var1 = c(36,33,30,27,24,21,18,15,12,9,6,3), Var2 = c(4,8,12,16,20,24,28,32,36,40,44,48)) 



shinyServer(function(input, output) { 


    #Create plot 

    output$lineChart <- renderPlotly({ 

    #using ggplot 
    p <- ggplot(data=data, aes_string(x='Month', y = input$Measure)) +geom_line(size = 1.5) + theme_minimal() 
    ggplotly(p) 



    #Using PLotly 
    #p <- plot_ly(data = data, x= Month, y = input$Measure, type = "line") 

    }) 

}) 

W powyższym przykładzie, mogę używać kropli do przełącznika między Var1 i Var2. Mój wykres zmienia się odpowiednio. Kod wykorzystuje funkcję ggplot, a funkcja aes_string pobiera dane wejściowe. To jest następnie przekształcane w spisek interaktywny za pomocą funkcji ggplotly.

Czy jest sposób, w jaki mogę to zrobić w sposób natywny ze spiskami?

+0

upewnij jest powtarzalny. – MLavoie

+2

Czy możesz podać działającą małą aplikację i przykładowe dane (oraz kod reaktywny? Nie możesz użyć takiej wartości wejściowej. – Gopala

Odpowiedz

-1

Wystarczy tylko użyć data[ ,input$Measure] jak Twój y zmiennej:

p <- plot_ly(data = data, x= Month, y = data[ ,input$Measure], type = "line") 
11

Zastosowanie baza :: get() funkcja:

p <- plot_ly(data = data, x = ~Month, y = ~get(input$Measure), type = "line") 

lub taka sama przy użyciu ggplot:

p <- ggplot(data = data, aes(x = Month, y = get(input$Measure))) + 
geom_line(size = 1.5) + 
theme_minimal() 
ggplotly(p) 
Powiązane problemy