2017-06-09 15 views
0

Shinyアプリケーションでggplotlyプロット(server.Rのタブ3を参照)が動作しません。しかし、RStudioでプロットを単独で生成するとうまくいきます。Shinyアプリケーションでggplotlyが正しく動作しない

これは、プロットを正しく描画しないコードのビットです。

output$facetmap=renderPlotly({ 

     ggplotly(

     ggplot(ranksvf(),aes(Rank,input$parameterchoice,fill=Location))+ 
     ggtitle("") + 
     theme(axis.title.y=element_blank())+ 
     geom_bar(position="dodge",stat="identity")+ 
     facet_wrap(~Tran.Hour.2h.Slot,nrow=2) 

     ) 

    }) 

私はそれが正しくプロットをレンダリングしていないと言うとき、私は二つのことを意味する。)

1を私はggplotでinput$parameterchoiceを使用すると、グラフが変な出てきます。それはこのように見えます。 2)input$parameterchoiceの代わりにggplotの入力の実際の名前を使用すると、プロットがきれいになります。しかし、私がマウスオーバーしてプロットすると、値は表示されません(プロットグラフなので表示されるはずです)。

私が奇妙に感じるのは、私のアプリケーションのタブ2でもggplotlyを使用していて、うまくいきます(マウスオーバーも機能します)。

reactiveの機能を使用した方法と問題があると思いますが、わかりませんが私はしばらくの間デバッグしようとしましたが、これまでの運はありません。

これは私のアプリの外観です。

#### 
#UI# 
#### 

    ui=fluidPage(theme = shinytheme("paper"), 
       titlePanel("Visualising Site-Specific Indicators: XYZ University"), 
       #img(src='xyz.jpg', align = "left"), 
        tabsetPanel(

          #TAB 1 

          tabPanel(type="pills","Macro-View of Locations", 
            fluidRow(
              column(width = 4, 
                wellPanel(  
                 selectInput("size", 
                 label="Select Parameter for Rectangle Size", 
                 choices=names(details)[2:5],selected = "Average Daily Transactions"))), 

              column(width = 4, 
                wellPanel(
                 selectInput("color", 
                 label="Select Parameter for Rectangle Color", 
                 choices=names(details)[2:5],selected = "Unique Products Sold")) 
               )#Close column 

              ), #Close fluidRow 

            fluidRow(
              plotOutput("plot")), 
            fluidRow(
              dataTableOutput("tab")) 

            ),#Close tabPanel macroview 

          #TAB 2 

          tabPanel("Transaction Overiew by Location", 
            fluidRow(
             column(width = 4, 
              wellPanel(  
               selectInput("sitechoice", 
                  label="Select a Site", 
                  choices=unique(heatmap_mean$Location),selected = "Horton 1")) 
              )#Close column 

            ), #Close fluidRow 

            fluidRow(
             plotlyOutput("heatmap")), 
            fluidRow(
             dataTableOutput("tab2")) 

            ),#Close tabPanel transactionoverview 

          #TAB 3 

          tabPanel("Parameter Ranking", 
            fluidRow(
             column(width = 4, 
              wellPanel( 
               selectInput("parameterchoice", 
                  label="Rank By", 
                  choices=unique(c(names(rankdf_avgtran),names(rankdf_ticket)))[3:4],selected = "Average Transaction Value (USD)")) 
              ),#Close column 

             column(width=6, 
              wellPanel(
               sliderInput("rankchoice", 
                  label="Number of Ranks Desired", 
                  min=1, 
                  max=10, 
                  value=5)) 
              )#Close column 

            ), #Close fluidRow 

            fluidRow(
             plotlyOutput("facetmap")), 
            fluidRow(
             dataTableOutput("tab3")) 

          )#Close tabPanel transactionoverview 

    ) #Close tabsetpanel  
    ) #Close UI 

    ######## 
    #SERVER# 
    ######## 

    server=function(input, output,session) { 


    # TAB 1 

     sortTable <- reactive({ 
     details[do.call(order, -details[as.character(input$size)]),] 
     }) 

     output$plot= renderPlot ({ 
     treemap(details, 
       index=c("Site"), 
       vSize=input$size, 
       vColor=input$color, 
       title="XYZ University: Overview of Site Data", 
       fontsize.title = 20, 
       #sortID = paste("-",input$sort,sep=""), 
       type="value") 
     }) 

     output$tab <- renderDataTable({ 
     sortTable() 

     }) 


    #TAB 2 

    test=reactive({ 
     heatmap_mean %>% filter(Location==input$sitechoice) 
    }) 

    output$heatmap=renderPlotly({ 
     ggplotly(
     ggplot(test(), aes(Day, `Time Slot`)) + 
     geom_tile(aes(fill = `Average Number of Transactions`),color = "white") + 
     scale_fill_gradient(low = "lightblue", high = "darkblue") + 
     ylab("") + 
     xlab("") + 
     theme(legend.title = element_text(size = 8), 
       panel.background = element_blank(), 
       legend.text = element_text(size = 8), 
       plot.title = element_text(size=18), 
       axis.title=element_text(size=22,face="bold"), 
       axis.text.x = element_text(angle = 90, hjust = 1)) + 
     labs(fill = "")) 


    }) 

    output$tab2 <- renderDataTable({ 
     test() 

    }) 

    #TAB 3 

    ranks_pen <- reactive({ 

     if(input$parameterchoice=="Average Number of Transactions") 
      { 
     showdata=rankdf_avgtran %>% 
     group_by(Tran.Hour.2h.Slot) %>% 
     top_n(n = input$rankchoice, wt = `Average Number of Transactions`) %>% #For each time slot, cut off top n values. 
     mutate(Rank = rank(-`Average Number of Transactions`, ties.method = "first")) #And rank for each of the 'n' sites for each time slot 
     return(showdata) 
      } 

     else 

     if(input$parameterchoice=="Average Transaction Value (USD)") 
      { 
      showdata=rankdf_ticket %>% 
      group_by(Tran.Hour.2h.Slot) %>% 
      top_n(n = input$rankchoice, wt = `Average Transaction Value (USD)`) %>% #For each time slot, cut off top 'n' values. 
      mutate(Rank = rank(-`Average Transaction Value (USD)`, ties.method = "first")) #And rank the 'n' sites for each time slot 
      return(showdata) 
      } 

    }) 

    ranksvf<- reactive({ 
       ranks_pen() %>% 
       group_by(Tran.Hour.2h.Slot) %>% #Group the columns 
       arrange(Rank) #Arrange rank from 1 to 'n' 
    }) 

    output$facetmap=renderPlotly({ 

     ggplotly(

     ggplot(ranksvf(),aes(Rank,input$parameterchoice,fill=Location))+ 
     ggtitle("") + 
     theme(axis.title.y=element_blank())+ 
     geom_bar(position="dodge",stat="identity")+ 
     facet_wrap(~Tran.Hour.2h.Slot,nrow=2) 

     ) 

    }) 

    output$tab3 <- renderDataTable({ 
    ranksvf() 
    }) 

    }#Close server 

    #RUN APP 
    shinyApp(ui,server) 

答えて

0

input$parameterchoiceしかしaesが唯一の引数として引用符で囲まれていない文字列を受け入れ、引用符で囲まれた文字列を返します。代わりにaes_を使用すると、問題に

output$facetmap=renderPlotly({ 
    pc <- input$parameterchoice 
    ggplotly(
     ggplot(ranksvf(),aes_(quote(Rank),as.name(pc),fill=quote(Location)))+ 
     ggtitle("") + 
     theme(axis.title.y=element_blank())+ 
     geom_bar(position="dodge",stat="identity")+ 
     facet_wrap(~Tran.Hour.2h.Slot,nrow=2) 
) 
}) 
+0

ありがとうございます。今はうまく動作します。私はこれまで、 'aes_'を' quote'引数の代わりに '〜'を使い、 'aes_string'を" "と併用しようとしましたが、どちらもうまくいきませんでした。 – varun

0

それを試してみてください。

selectInput("parameterchoice", 
       label="Rank By", 
       choices=as.list(unique(c(names(rankdf_avgtran),names(rankdf_ticket)))[3:4]), 
selected = "Average Transaction Value (USD)") 
+0

おかげシェンを解決する必要がありますが、明らかに問題がggplotでAES引数に関連していました。 – varun

関連する問題