【问题标题】:How can I freeze the first column in DT without increasing the column width of a table with rotated (90°) column names?如何在不增加旋转 (90°) 列名的表的列宽的情况下冻结 DT 中的第一列?
【发布时间】:2022-05-10 17:47:39
【问题描述】:

我想要一个表格 dt1 格式的表格(旋转和冻结列名,窄列宽,水平和垂直滚动条)加上冻结第一列。 我可以使用“extensions =c("FixedColumns")”冻结第一列,但随后列宽会增加(参见表 dt2),尽管使用了“columnDefs”,但我无法定义更小的列宽。

谁能帮帮我?

library(DT)
headerCallback <- c(
  "function(thead, data, start, end, display){",
  "  var $ths = $(thead).find('th');",
  "  $ths.css({'vertical-align': 'bottom', 'white-space': 'nowrap'});",
  "  var betterCells = [];",
  "  $ths.each(function(){",
  "    var cell = $(this);",
  "    var newDiv = $('<div>', {height: 'auto', width: cell.height()});",
  "    var newInnerDiv = $('<div>', {text: cell.text()});",
  "    newDiv.css({margin: 'auto'});",
  "    newInnerDiv.css({",
  "      transform: 'rotate(180deg)',",
  "      'writing-mode': 'tb-rl',",
  "      'white-space': 'nowrap'",
  "    });",
  "    newDiv.append(newInnerDiv);",
  "    betterCells.push(newDiv);",
  "  });",
  "  $ths.each(function(i){",
  "    $(this).html(betterCells[i]);",
  "  });",
  "}"
)
df <- iris[,c(5, 1:4, 1:4, 1:4)]
dt1 <- datatable(df,  rownames=FALSE, 
                class = 'cell-border stripe',
                
                extensions = c("FixedHeader"), #, c("FixedColumns", "FixedHeader")
                options = list(dom = 't', 
                               ordering=F, #no column sorting 
                               scrollY = '600px', paging = FALSE, scrollX = TRUE,
                               fixedHeader=TRUE,
                               headerCallback = JS(headerCallback),
                               fixedColumns = list(leftColumns = 1)))
dt2 <- datatable(df,  rownames=FALSE, 
                 class = 'cell-border stripe',
                 
                 extensions =c("FixedColumns", "FixedHeader"),
                 options = list(dom = 't', 
                                ordering=F, #no column sorting 
                                scrollY = '600px', paging = FALSE, scrollX = TRUE,
                                fixedHeader=TRUE,
                                #define col withs  does not help
                                autoWidth = TRUE,
                                columnDefs = list(list(width = '15px', targets = "_all")), 
                               columnDefs = list(list(className = "nowrap", targets = "_all")),
                               ## 
                                headerCallback = JS(headerCallback),
                                fixedColumns = list(leftColumns = 1)))

【问题讨论】:

  • 一种解决方案可能是显示行名并冻结行名而不是​​第一列。有人知道如何冻结行名吗?

标签: r freeze dt column-width


【解决方案1】:

https://github.com/rstudio/DT/issues/275 也许无法修复错误。需要更多时间来解决问题。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2014-05-03
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
相关资源
最近更新 更多