bodega18
bodega18

Reputation: 654

Calendar Heatmap in R

Looking to create a gt/reactable table in R that serves as a calendar heatmap. Something just like the one found on this site https://glin.github.io/reactable/articles/cookbook/cookbook.html. When I try to replicate that code, I get an error: "only defined on a data frame with all numeric-alike variables." I made Year a factor variable and do not want to color that column. Here is the code I tried + the dput output:

BuYlRd <- function(x) rgb(colorRamp(c("#7fb7d7", "#ffffbf", "#fc8d59")) 
(x), maxColorValue = 255)

reactable(
  bls,
  defaultColDef = colDef(
    style = function(value) {
      if (!is.numeric(value)) return()
      normalized <- (value - min(bls)) / (max(bls) - min(bls))
      color <- BuYlRd(normalized)
      list(background = color)
    },
    format = colFormat(digits = 2),
    minWidth = 50
  ),
  columns = list(
    .rownames = colDef(name = "Year", sortable = TRUE, align = 
"left")
  ),
  bordered = TRUE
)

dput(head(bls))

 structure(list(year = structure(1:3, .Label = c("2018", "2019", 
    "2020"), class = "factor"), January = c(329.5, 329.6, 327.5), 
        February = c(354.4, 328.5, 323.7), March = c(354.4, 324, 
        324.9), April = c(348.7, 326.9, 319.8), May = c(340.2, 321, 
        320.7), June = c(338, 316.1, 320.4), July = c(342.3, 317.3, 
        319), August = c(346.8, 317.3, 317.2), September = c(344.9, 
        317.3, 317), October = c(342.4, 318.2, 317.3), November = 
    c(334.4, 
        317.3, 328.2), December = c(335.5, 317.4, 328.7)), row.names = 
    c(NA, 
    -3L), class = c("tbl_df", "tbl", "data.frame"))

Upvotes: 0

Views: 509

Answers (1)

Basti
Basti

Reputation: 1763

A solution could be to put the year column into the rownames of your dataset, and removing the year column thereafter :

bls=as.data.frame(bls)
rownames(bls)=bls$year
bls=bls[,-1]
reactable(
  bls,
  defaultColDef = colDef(
    style = function(value) {
      if (!is.numeric(value)) return()
      normalized <- (value - min(bls)) / (max(bls) - min(bls))
      color <- BuYlRd(normalized)
      list(background = color)
    },
    format = colFormat(digits = 2),
    minWidth = 50
  ),
  columns = list(
    .rownames = colDef(name = "Year", sortable = TRUE, align = 
"left")
  ),
  bordered = TRUE
)

enter image description here

Upvotes: 1

Related Questions