Условная окраска сюжетно блестящая - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть простой фрейм данных в 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 голосов
/ 12 декабря 2018

ОК решил проблему самостоятельно.

  1. Я изменил имя кадра данных data -> data_bar (чтобы исключить коллизии с функцией в базе R).
  2. Сделал реактивцветовая палитра вне renderPlotly (прибыль - 4-й столбец).:

    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())) 
    

    )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...