2017-10-05 38 views
0

我在那系統會根據各種用戶輸入過濾閃亮應用一個數據幀。[R plotly添加有條件基於可用的列上的痕跡在數據幀

global_evolution=reactive({ 

    results_combined %>% 
    filter(!is.na(SVM_LABEL_QOL) & SVM_LABEL_QOL=='QoL' & globalsegment==input$inp_pg1segment & Account==input$inp_pg1clientsfiltered & Date >=input$inp_pg1daterange[1] & Date <=input$inp_pg1daterange[2]) %>% #Inputs 
    select(Account,Date,SVM_LABEL_DIMENSION) %>% 
    mutate(Month=month(as.Date(format(as.POSIXct(Date),format = "%d/%m/%Y"),"%d/%m/%Y"))) %>% 
    select(Account,Month,SVM_LABEL_DIMENSION,-Date) %>% 
    group_by(Month,SVM_LABEL_DIMENSION) %>% 
    summarise(Monthly_Count=n()) %>% 
    spread(SVM_LABEL_DIMENSION,Monthly_Count) %>% 
    ungroup() %>% 
    mutate(Month=month.abb[Month]) %>% 
    mutate_all(funs(replace(., is.na(.), 0))) 

}) 

在接下來的步驟中,我通過這個過濾數據幀通過plot_ly功能

這裏就是我需要幫助

我試圖讓plot_ly有條件地添加行(添加痕跡),根據給出的列是否在數據幀中可用或者不是。目前,plot_ly如果add_trace中包含的任何列在數據幀被過濾後不可用,則會引發錯誤。

這是我與plot_ly輸出閃亮的應用程序的一部分。 我試圖在add_trace參數之間添加if-else聲明,但我的嘗試未獲成功。

output$pg1evolution <- renderPlotly({ 

global_evolution_final() %>% 
plot_ly(x = ~Month, y = ~`COLUMN_1`, name = 'Column 1', type = 'scatter', mode = 'lines') %>% 
add_trace(y = ~`COLUMN_2`, name = 'Column 2') %>% 
add_trace(y = ~`COLUMN_3`, name = 'Column 3') %>% 
add_trace(y = ~`COLUMN_4`, name = 'Column 4') %>% 
add_trace(y = ~`COLUMN_5`, name = 'Column 5') %>% 
add_trace(y = ~`COLUMN_6`, name = 'Column 6') %>% 
layout(title = "Trend Over Time", 
     xaxis = list(title = ""), 
     yaxis = list (title = "Monthly Count of Products Sold")) 

}) 

我很抱歉無法包含可重現的數據框,我意識到這會讓事情變得更簡單。 非常感謝您的任何提示/指針。

回答

1

一種方式做到這一點可能是使用一個for循環,以每列

output$pg1evolution <- renderPlotly({ 

colNames <- names(global_evolution_final())[-1] #Assuming Month is the first column 

p <- plotly::plot_ly(data = global_evolution_final(), x = ~Month, type = "scatter", 
        mode = "lines") 

for(trace in colNames){ 
    p <- p %>% plotly::add_trace(y = as.formula(paste0("~`", trace, "`")), name = trace) 
} 

p %>% 
layout(title = "Trend Over Time", 
     xaxis = list(title = ""), 
     yaxis = list (title = "Monthly Count of Products Sold")) 
}) 
+0

優雅的解決方案添加跟蹤。謝謝尼克! – Varun

+0

Niket我對代碼做了一個小修改,輸入='bar'而不是線條圖。但是,當我繪製它時,我會在圖例中看到「跟蹤0」以及其他列名稱。你知道這是從哪裏來的嗎? – Varun

相關問題