2016-04-22 12 views
2

Shotを使用して、Plotlyを使用してレンダリングされた複数行グラフでプロットする変数を選択しようとしています。私は多くの変数を持っているので、Plotlyのインタラクティブな凡例「クリック」選択メカニズムを使用する代わりに、Shinyを使用して選択したいと考えています。 例データ:Plotly直接使用する場合R Plotly折れ線グラフのトレースを選択しますか?

library(plotly)      
# Example dataframe 
foo <-data.frame(mon = c("Jan", "Feb", "Mar"), 
        var_1 = c(100, 200, 300), 
        var_b = c(80, 250, 280), 
        var_three = c(150, 120,201) 
       ) 

私は手動でこのようなコードを使用してトレースを追加することもできます。

p <- plot_ly(x = foo$mon, y = foo$var_1, line = list(shape="linear")) 
p <- add_trace(p, x = foo$mon, y = foo$var_b) 
p <- add_trace(p, x = foo$mon, y = foo$var_three) 
print(p) 

は、今私は、私が上で見たい変数を選択するために、光沢のあるチェックボックスを使用したいですプロット。選択は入力$ show_varsに取り込まれますが、どのようにこの変数リストをループしてプロットするのですか?ここに変数の1つを手動でプロットする私のapp.Rコードがあります。提案は高く評価されました!

#------------------------------------------------------------------------------ 
# UI 
#------------------------------------------------------------------------------ 
ui <- fluidPage(
    sidebarLayout(
     sidebarPanel(
      checkboxGroupInput('show_vars', 'Columns in the dataset', names(foo), 
           selected = c('mon', 'var_1')), 
      helpText('Select the variables to show in the graph.') 
     ), 
     mainPanel(
      plotlyOutput("myPlot") 
     ) 
    ) 
) 
#------------------------------------------------------------------------------ 
# SERVER 
# Need to loop through input$show_vars to show a trace for each one? 
#------------------------------------------------------------------------------ 
server <- function(input, output) { 
    # a large table, reative to input$show_vars 
    output$uteTable = renderDataTable({ 
     library(ggplot2) 
     ute[, input$show_vars, drop = FALSE] 
    }) 

    output$myPlot = renderPlotly({ 
     plot_ly(x=foo$mon, y=foo$var_1, line = list(shape="linear")) 
     ## How to add the other traces selected in input$show_vars?? 
    }) 
} 
shinyApp(ui = ui, server = server) 

UPDATE:私は私がfooの$のVAR_1を使用するためにハードコーディング最初のプロットを避けるために、スクリプトが必要であることを今実現しています。プロットは、チェックボックスで選択可能なもののどれかを使用する必要があります(選択リストから削除した$ monを除く)。最初のプロット文を条件付きにしようとすると、「エラー:最後のプロットは存在しません」というメッセージが表示されます。つまり、これは動作しません。

output$myPlot = renderPlotly({ 
    # p <- plot_ly(x=foo$mon, y=foo$var_1, line = list(shape="linear")) 
    for (item in input$show_vars) { 
     if (item == 1){ 
      p <- plot_ly(x=foo$mon, y=foo[[item]], line = list(shape="linear")) 
     } 
     if(item > 1){ 
      p <- add_trace(p, x = foo$mon, y = foo[[item]], evaluate = TRUE) 
     } 
    } 
    print(p) 

答えて

2

これが望ましいかどうかを確認してください。また、checkboxGroup内の最初の2つの項目を削除して、必要なものに応じてリムーバブルでないようにすることもできます。

output$myPlot = renderPlotly({ 
    p <- plot_ly(x=foo$mon, y=foo$var_1, line = list(shape="linear")) 
    ## How to add the other traces selected in input$show_vars?? 
    for (item in input$show_vars) { 
     p <- add_trace(p, x = foo$mon, y = foo[[item]], evaluate = TRUE) 
    } 
    print(p) 
}) 
+0

あなたの答えは私の元の質問に基づいて完璧です。 foo $ var_1を使用するための最初のプロットをハードコーディングしないようにスクリプトが必要になったことがわかりました。プロットは、チェックボックスで選択可能なもののどれかを使用する必要があります(選択リストから削除した$ monを除く)。最初のプロット文を条件付きにしようとすると、「エラー:最後のプロットは存在しません」というメッセージが表示されます。これはうまくいきません:for(input $ show_vars){ if(item == 1){ p < - plot_ly(x = foo $ mon、y = foo [[item]]、line = list shape = "linear")) } – Tim

+0

プロットが正しく動作するためには、y軸を持つ必要があるので、これは表示されるよりも難しいです。人々がすべてをチェックしないようにすると、 'y'軸のないプロットがあり、あなたは奇妙な結果を得るでしょう。少なくとも1つのボックスがシャイニーでチェックされるようにする直接的な方法はありません。 –

関連する問題