Я использую datatable в блестящем приложении с настраиваемой окраской ячеек. Это делается в html (каждая ячейка - это div
) и путем указания DT не экранировать эти конкретные столбцы.
С DT это выглядит так: скриншот
Моя проблема в том, что я хотел бы, чтобы раскраска занимала всю высоту каждой ячейки, чтобы не было полей. Было бы здорово, если бы у меня были разные цвета ячеек, чтобы они соприкасались друг с другом.
Я пытался добавить margin: 0px; padding: 0px;
, но без разницы.
Я также пытался использовать formatstyle
из DT
, чтобы уменьшить высоту строки следующим образом: formatStyle( 0, target = 'row', lineHeight = '80%')
, и результат выглядит так: снимок экрана 2
Я сейчас пытаюсь использовать padding: 0px;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;
, но он не работает лучше. Мне кажется, что это поле от DT
, а не от моего div
, поскольку что бы я ни пробовал в своем стиле div, у меня всегда одни и те же поля между цветами и пределами высоты строки. Единственное, я не знаю, как это контролировать.
Кто-нибудь знает, как добиться такого результата? Заранее благодарю за вашу помощь.
Используемый код:
for (c in colnames(ranking)[10:13]) {
ranking <- ranking %>%
filter(param %in% input$param) %>%
arrange_(.dots = c) %>%
mutate(!!paste0(c, "_rk") := 1:nrow(ranking %>% filter(param %in% input$param)))
tmp <- ranking %>%
arrange_(.dots = c) %>%
select_(.dots = c)
max <- tmp %>% tidyr::drop_na() %>% .[, 1] %>% max()
min <- tmp %>% tidyr::drop_na() %>% .[, 1] %>% min()
range <- max - min
brks <- vector(length = colors)
for (i in 1:colors) {
brks[i] <- i^pracma::bisect(function(x) range^(1/x) - (colors + 1), 1, 5)$root %>% round(2) + min - 2
}
tmp <- tmp %>%
mutate(brks = ifelse(is.na(tmp[, 1]),
NA,
cut(tmp %>% tidyr::drop_na() %>% .[, 1], brks)))
colfunc <- colorRampPalette(c("#c31432", "#ffc500", "#edde5d", "white"))
clrs <- colfunc(colors + 1)
tmp_nrow <- tmp %>% nrow()
for (i in 1:tmp_nrow) {
row <- which(tmp[i, 1] == ranking[,c])
r <- clrs[tmp[i, 2]] %>% col2rgb() %>% .[1]
g <- clrs[tmp[i, 2]] %>% col2rgb() %>% .[2]
b <- clrs[tmp[i, 2]] %>% col2rgb() %>% .[3]
tmp[i, 1] <- paste0("<center><div style='background: ", "radial-gradient(rgba(", r, ",", g, ",", b, ",", "0), rgba(", r, ",", g, ",", b, ",", "0.25), rgba(", r, ",", g, ",", b, ",", "1)", ")", "; border: solid 0px;font-family: \"Interstate Black\";font-weight: bolder;padding: 0;margin: 0;'>",
tmp[i, 1],
"</div></center>")
ranking[row,paste0(c, "_coloring")] <- tmp[i, 1]
}
}
ranking_m <- as.matrix(ranking %>%
filter(param %in% input$param) %>%
select(4, 47, 40, 38, 31, 32, 41, 42, 43, 44))
DT::datatable(ranking_m,
escape = c(TRUE, FALSE, rep(FALSE, 8)),
filter = 'top',
extensions = list('Responsive' = NULL),
options = list(pageLength = 25,
lengthMenu = c(10, 25, 50, 100),
columnDefs = list(list(width = '400px', targets = 0),
list(width = '25px', targets = 1),
list(className = 'dt-center', targets = 2:9)))) #%>%
# formatStyle( 0, target = 'row', lineHeight = '80%')
htmlTableWidget
на DT, поэтому я могу использоватьDT
только, когда дело касается таблиц, вместе с фильтрацией и сортировкой, что отлично. Обычно у меня не было этой проблемы с полем дляhtmlTableWidget
, но ни сортировка, ни фильтрация были невозможны. Какой пакет вы имеете в виду? - person homer3018   schedule 20.05.2019paste0("<center><div style='background: ", "radial-gradient(rgba(", r, ",", g, ",", b, ",", "0), rgba(", r, ",", g, ",", b, ",", "0.25), rgba(", r, ",", g, ",", b, ",", "1)", ")", "; border: solid 0px;font-family: \"Interstate Black\";font-weight: bolder;padding: 0px;margin:0px;'>", tmp[i, 1], "</div></center>")
tmp[i,1]
- числа, отображаемые в каждой ячейке. - person homer3018   schedule 20.05.2019tableHTML
и функцииadd_css_conditional_column
. У вас есть полный контроль над раскраской (чтобы ранжировать именно так, как вы хотите - цвета охватывают всю ячейку), но при этом упускаются функции сортировки и фильтрации JS. Если сортировка / фильтрация не проблема, могу показать вам пример - person LyzandeR   schedule 20.05.2019htmlTableWidget
, но в нем также отсутствуют сортировка и фильтрация, что является очень хорошей функцией. В любом случае спасибо за предложение :) - person homer3018   schedule 20.05.2019td
), а не для содержимого ячеек. Пожалуйста, предоставьте код, чтобы я мог вам помочь. - person Stéphane Laurent   schedule 21.05.2019formatStyle
возможно. Но я должен увидеть, как вы условно определяете цвета (я не знаю, что такоеr
,g
,b
иi
в коде, который вы разместили в комментарии). Пожалуйста, предоставьте код, который генерирует вашу таблицу. - person Stéphane Laurent   schedule 21.05.2019tmp[i,1]
на то, что вы видели. поэтомуi
- это номер строки. Я смогу поделиться еще несколькими кодами, но прежде, чем мне нужно будет сделать его более похожим на минимальный пример. Возможно, это неэффективно, но в моем случае это работает. Спасибо за помощь! - person homer3018   schedule 21.05.2019formatStyle
) объекта DT, только я не знаю, как его правильно написать. - person homer3018   schedule 21.05.2019formatStyle
, дает второй снимок экрана, на котором все сжато по горизонтали. Это могло бы помочь в дальнейшем отображении большего количества строк на экранах, но сначала мы должны избавиться от этого поля. - person homer3018   schedule 21.05.2019formatStyle
, как вы. Спасибо ! Я протестирую и отчитаюсь. - person homer3018   schedule 21.05.2019