Я использую DT::renderDT
в блестящем приложении и форматирую цвет фона для определенных столбцов и строк. Мне нужно, чтобы цвет фона строки был поверх цвета фона столбца. Я попытался переключить порядок formatStyle
, но это не сработало. Вот небольшой пример -
library(shiny)
library(DT)
shinyApp(
ui = fluidPage(
DTOutput("table")
),
server = function(input, output, session) {
output$table <- renderDT({
head(iris) %>%
datatable() %>%
formatStyle(c(2,4), backgroundColor = "#fcf4d9") %>%
formatStyle(1, target = 'row',
backgroundColor = styleEqual(c(4.7, 5), c("#fc8a8a", "#fc8a8a"))
# comment above row and ucomment below row for row color using styleInterval()
# backgroundColor = styleInterval(c(0, 5, 9), c('blue', 'green', 'red', 'orange'))
)
})
}
)
Результат (неверный) с styleEqual()
-
Результат (неверный) с StyleInterval()
-
The row colors need to be on top of yellow (column color).
Ищете обобщенное решение, которое работало бы для нескольких строк и с styleEqual()
или styleInterval()
. Любая помощь приветствуется. Спасибо!
Вот решение:
rowCallback <- c(
"function(row, data, displayNum, displayIndex, dataIndex){",
" if (data[1] === 4.7){",
" $(row).find('td').addClass('red');",
" }",
"}"
)
shinyApp(
ui = fluidPage(
tags$head(
tags$style(
HTML(
"table.dataTable tbody tr td.red {background-color: #fc8a8a !important}"
)
)
),
DTOutput("table")
),
server = function(input, output, session) {
output$table <- renderDT({
head(iris) %>%
datatable(options = list(rowCallback = JS(rowCallback))) %>%
formatStyle(c(2,4), backgroundColor = "#fcf4d9")
})
}
)
@Shree Мне непонятно. Не могли бы вы привести пример для нескольких строк, включая styleInterval
?
Привет, мой пример показывает 2 ряда Sepal.Length = c(4.7, 5)
, окрашенных в красный цвет с использованием styleEqual()
. Также обновлен пример, чтобы включить styleInterval()
. Дайте мне знать, если все еще непонятно. Спасибо!
Для styleEqual(4.7,5)
просто замените if (data[1] === 4.7)
на if (data[1] === 4.7 || data[1] === 5)
.
@Shree Я не понимаю, чего вы ожидаете от styleInterval
: это добавит цвет фона в строку каждый, поэтому, если этот фон находится сверху, фон для столбцов будет невидимым.
Да, ваша точка зрения о styleInterval()
имеет смысл. Я сосредоточился только на коде и не думал об этом. Также ваше решение для styleEqual(4.7, 5)
пока годно. Спасибо за помощь!
Привет, большое спасибо за решение. Я не мог обобщить это для случаев, когда мне нужно раскрасить более одной строки (я плохо разбираюсь в JS). Я обновил вопрос соответственно. Было бы здорово, если бы вы могли включить в свой ответ какое-то объяснение того, как обобщать. Спасибо!