In the example that I posted below, I have a df with 100 rows and 100 columns with numeric values (except the first column) that I would like to print with sequential color scale on the main panel in Shiny. Since all columns don’t fit in a single window, I would like to use horizontal scrolling while keeping the first column fixed. Here is my attempt at it. Not sure where I am going wrong. As you can see, I am using DT package. I would appreciate if someone can also show me the solution with reactable package.
library(shiny)
library(tidyverse)
df <- matrix(runif(100*100,0,1000) %>% floor(),nrow = 100,ncol = 100) %>% as_tibble() %>%
mutate(V1=rep_len(letters,length.out = 100))
# Define UI for application that draws a histogram
ui <- fluidPage(
# Application title
titlePanel("Table"),
sidebarLayout(
# Show the table
sidebarPanel(),
mainPanel(
DT::DTOutput("table")
)
)
)
# Define server logic
server <- function(input, output) {
output$table <- DT::renderDT({
#splitting values into quantiles
brks <- quantile(df %>% select(-1), probs = seq(0,1,length.out = 39), na.rm = TRUE)
#creating a blue palette
clr_plt_blue_func <- colorRampPalette(c("white","lightblue","skyblue","royalblue","navyblue"))
clr_plt_blue <- clr_plt_blue_func(40)
DT::datatable(df,options = list(pageLength=20,
class= 'cell-border stripe',
searching=TRUE,
extensions='FixedColumns',
scrollX = TRUE,
fixedColumns=list(leftColumns=2)
)
) %>%
DT::formatStyle(columns = names(df)[-1],
backgroundColor = DT::styleInterval(brks, clr_plt_blue),
color = 'red',
fontWeight = 'bold')
})
}
# Run the application
shinyApp(ui = ui, server = server)