2016-07-10 10 views
4

誰が助けることができますか、これは私の最初の投稿です。私は数時間かけて、作成したい光沢のあるアプリケーションにggplotを使って棒グラフを生成する方法を理解しようとしました。しかし、uiの作品は見つける、しかし、サーバー関数は空のプロットを生成します。問題は、renderPlot関数にあります。私はggplotのaes_string引数に反応値を適切に渡してはならないと信じています。 C2はフィルタリングされたデータセットです。目標は、ユーザーが2つの変数を選択し、それらの変数に基づいてデータセットをフィルタリングする単純なアプリケーションを構築することです。サブセット化されたデータセットは、ggplotデータ引数に渡されます。Shinyアプリケーションでggplotを使用して反応性プロットを作成するには

 library(shiny) 
library(dplyr) 


ui <- fluidPage(
    sidebarLayout(
    sidebarPanel(
     selectInput(inputId = "Demog",label = "Factor:",choices = c("HH Income" = "Income", 
                    "Age Group" = "Age", 
                    "US Region" = "Region") , selected = "Age"), 
     selectInput(inputId = "Car",label = "VW Model:",choices = c("BEETLE" = "BEETLE", 
                    "CC" = "CC", 
                    "EOS" = "EOS", 
                    "GOLF" = "GOLF", 
                    "GTI" ="GOLF SPORTSWAGEN GTI", 
                    "JETTA" = "JETTA", 
                    "PASSAT" = "PASSAT", 
                    "TIGUAN" = "TIGUAN", 
                    "TOUAREG" = "TOUAREG") , selected = "BEETLE"), 
     radioButtons(inputId = "Metric",label ="Measurement Type",choices = 
        c("Conquest Volume Index" = "TotCmpConqVol_IDX","C/D Ratio" = "TotCmpCDRatio_IDX"), selected = "TotCmpConqVol_IDX")     

    ) 
), 
    mainPanel(
    tags$h1("The Bar Charts"), 
    tags$h2("The metrics"), 


    plotOutput("P1") 

) 

) 
server <- function(input, output){ 
    library(ggplot2) 
    CONQDF <- read.csv("C:/Users/Reginald/Desktop/CONQ_VW/CONQUEST2.csv") 

    C2 <- reactive(subset(CONQDF,input$Demog %in% levels(input$Demog)[1] & CONQDF$VW_Model == input$Car)) 

    output$P1 <- renderPlot({ 
    ggplot(C2(),aes_string(x="CompMake", y=input$Metric))+ geom_bar(stat = "identity") 
          }) 
} 






shinyApp(ui,server) 
+0

ようこそstackoverflowへようこそ!あなたは、例えば、車のデータセットの例のデータセットを使用し、それに応じて選択肢を変更すると、コードが再現可能になり、より速い回答が得られます。 –

+0

ggplot2を使用するときは、正しく思い出すには 'print()'を使うべきです。それで... print(pg) –

+0

@Mikael Jumppanen Mikaelありがとうございました。私はこれらのオプションを試しました。(ggplot(C2()...)私は速い応答のためにありがとう、私は実行するコードを得ることができるかどうか見るために例のデータセットの1つを使用するでしょう、そうでなければ、私は例のデータセットで私の応答を再投稿します。 – RareAir

答えて

1

ただし、ui worksが見つかりました。サーバー関数は空の プロットを生成します。

これは、おそらく、関数subsetが空のデータセットを返すためです。コードをデバッグするためには、まず、私は、コンソールでこの部分をプリントアウトします:

C2 <- reactive(subset(CONQDF,input$Demog %in% levels(input$Demog)[1] & CONQDF$VW_Model == input$Car)) 

私はinput$Demogはただの文字列ではなく要因であるため、この部分が間違っていると信じています。だからこそlevels(input$Demog) = NULLinput$Demog %in% levels(input$Demog) = FALSEです。したがって、結果として、空のデータセットが取得されます。この確認するに

output$P1 <- renderPlot({ 
    print(C2()) # print it out to the console. 
    ggplot(C2(),aes_string(x="CompMake", y=input$Metric))+ geom_bar(stat = "identity") 
}) 

をこのような場合は、あなただけの再考部分をサブセット化する必要があります。

+0

デバッグを簡単にするために、入力の操作や入力の結果をプリントアウトするオブザーバーを定義することもできます。例: 'observe({print(levels $ input)}})' –

+0

ありがとうございます。私はこれらの答えから多くを学んでいます。上記のデバッグの提案を試みます。私はそれを感謝し、私はそれが正しい解決に役立つかどうかを知らせます。 – RareAir

0

あなたC2機能がCONQDF(それゆえ、ブランクプロット)を見ることができないように見えます。 C2の呼び出しでの後にCONQDFを追加すると、その都度read.csvを実行することができますが、サーバー機能の外にread.csvを移動する方がよいでしょう。

だからlibrary(dplyr)の下に、スクリプトの先頭に

CONQDF <- read.csv("C:/Users/Reginald/Desktop/CONQ_VW/CONQUEST2.csv") 

この行を移動します。これにより、入力が更新されるたびにではなく、ページが最初に読み込まれるときに光沢のある読み込みファイルが作成され、その結果のデータフレームがグローバル環境に配置されます。これにより、C2 <-呼び出しで表示されます。

私は簡単にあなたのアプリを再現することはできませんので、私は私の答えをテストすることはできません。それが助けになるかどうか私に教えてください。

+1

rosscovaありがとうありがとうございます。私は実際のプログラミングにはまったく新しいので、これはスコープの問題になることはありませんでした(私はちょうどこれについて読んで始めました)。 )あなたのロジックは理にかなっており、私はそこに残しておきます。あなたと@Mikaelによって提案されたサンプルデータセットを使用します。次の数時間で解決できない場合は、サンプルデータセットを再投稿します。 – RareAir

+0

心配しないで、どうやって行っていいか教えてください。 – rosscova

+0

@RareAir問題を解決しましたか? – rosscova

関連する問題