微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用颜色向量填充可反应表格中的条形图?

如何解决如何使用颜色向量填充可反应表格中的条形图?

我有以下示例代码(受 Demo Cookbook 启发)为我的 reactable 表中的每一列数据创建条形图。

library(tidyverse)
library(htmltools)
library(reactable)

data <- tibble(
  a = c(9.175783855,11.81526856,0.958313222,5.616405204,2.52481891,1.781139798,1.440104888,2.40162111,5.144542917,8.254753493,6.651080016,4.44758866,2.714855098,2.35523782,2.20347958,6.761000611),b = c(3.87414355,10.75733095,6.823421855,10.11946139,3.677263099,4.287000085,4.993322574,2.691458126,7.013314446,4.900493424,8.649965459,1.482655707,0.20604618,0.32892486,2.161339902,4.55948858)
)

bar_style <- function(width = 1,fill = "#e6e6e6",height = "75%",align = c("left","right"),color = NULL) {
  align <- match.arg(align)
  if (align == "left") {
    position <- paste0(width * 100,"%")
    image <- sprintf("linear-gradient(90deg,%1$s %2$s,transparent %2$s)",fill,position)
  } else {
    position <- paste0(100 - width * 100,transparent %1$s,%2$s %1$s)",position,fill)
  }
  list(
    backgroundImage = image,backgroundSize = paste("100%",height),backgroundRepeat = "no-repeat",backgroundPosition = "center",color = color
  )
}

reactable(
  data,columns = list(
    a = colDef(align = "right",format = colFormat(digits = 1),style = function(value) {
                 bar_style(width = value / max(data$a),align = "right")
                         }),b = colDef(align = "left",style = function(value) {
                 bar_style(width = value / max(data$b),align = "left")
               })
  ))

我想知道如何根据下面的颜色代码填充每个条形图。本质上,我希望对 ab 列的每一行进行不同的填充。

a_fill <- c("#97233f","#241773","#0b162a","#fb4f14","#002244","#203731","#000000","#008e97","#4f2683","#004953","#aa0000")

b_fill <- c("#002244","#a5acaf","#e31837","#d50a0a","#0b2265","#9f8958","#03202f","#773141","#0085ca","#a71930","#00338d","#002c5f","#005a8b")

有人能帮我解决这个问题吗?

谢谢。

解决方法

这里有一个选项,我们创建一个带有两个参数的函数,'value'、'index','index' 将用于子集每个 'bar' 的相应颜色向量值

reactable(
  data,columns = list(
    a = colDef(align = "right",format = colFormat(digits = 1),style = function(value,index) {
                 
                 color <- a_fill[index]
                 width = value / max(data$b)
                 bar_style(width = width,fill = color,align = "right")
                 
               }),b = colDef(align = "left",index) {
                 width = value / max(data$b)
                 color <- b_fill[index]
                 bar_style(width = width,align = "left")
               })
  ))

-输出

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。