有条件的着色有光泽

时间:2018-12-12 10:37:32

标签: r shiny bar-chart plotly reactive

我在Shiny中有一个简单的数据框,并希望使用plot_ly绘制条形图,该条形图将根据值(如果利润> 0为绿色,否则为红色)进行条件着色。如何在color属性中引用特定的列?

 data<-reactive({names<-c("Initial", "New")
  revenue<-c(revenue1(),revenue2())
  costs<-c(input$costs, input$costs)
  profit1<-c(profit(), profit2())
  data<-data.frame(names, revenue, costs, profit1)
  data 
  })

  output$profit_bar<-renderPlotly(
    p<-data() %>%
      plot_ly(x = ~names, y = ~revenue, type = 'bar', name = 'Revenue', marker = list(color="#e5f4ea")) %>%
      add_trace(y = ~profit1, name = 'Profit',marker = list(color=ifelse(profit1>0,"#009933","FF6666"))) 

  )

我得到一个错误:找不到对象'profit1'。 我还尝试了其他选项(例如data [,4],但没有成功。在闪亮的外部,代码可以正常工作。

谢谢您的回答!

1 个答案:

答案 0 :(得分:0)

好,我自己解决了这个问题。

  1. 我更改了数据框 data-> data_bar 的名称(以省略与基R中的函数的冲突)。
  2. 在renderPlotly之外制作了反应性调色板(利润是第四列)。

    col<-reactive({ifelse(data_bar()[,4]>0,"#009933","FF6666")})

  3. 在renderPlotly中引用了此调色板。

    output$profit_bar<-renderPlotly(p<-data_bar() %>%
      plot_ly(x = ~names, y = ~revenue, type = 'bar', name = 'Revenue', marker = list(color="#e5f4ea")) %>%
      add_trace(y = ~profit1, name = 'Profit',marker = list(color=col()))