我在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],但没有成功。在闪亮的外部,代码可以正常工作。
谢谢您的回答!
答案 0 :(得分:0)
好,我自己解决了这个问题。
在renderPlotly之外制作了反应性调色板(利润是第四列)。
col<-reactive({ifelse(data_bar()[,4]>0,"#009933","FF6666")})
在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()))
)