样式颜色条居中并根据符号向左/右移动

16
我希望创建的条形图可以在使用DT的datatable时出现在列的单元格中间,并根据单元格中的值是正数还是负数向左或向右延伸。
我尝试使用styleColorBar函数并将参数backgroundPosition更改为'left''center',但每次尝试后,条形图仍然出现在单元格的右侧,并且始终向左延伸。
我找不到R代码的示例,但附上了Excel可以完成的示例;颜色不是必需的,但如果包括在内,那将是一个奖励。

enter image description here


1
这是一个有趣的问题,但它在呈现方式上缺乏努力。请添加一个可复现的示例。你可以添加一个最简化的示例,其中使用了backgroundPosition = 'left',这样人们就可以使用它并尝试找到解决方案。很不可能有人(包括我自己)会花时间编写能够产生所描述情况的代码,然后再试图找到解决方案... - LyzandeR
我明白我写的内容可能不容易理解,已经重新修改了一下,使它读起来更好一些。可能还不是非常好,但希望比以前更有意义! - Ashley Baldry
1个回答

32

您可以创建一个自定义的 styleColorBar 函数,使用CSS渐变(与原始的styleColorBar相同)来制作所需类型的条形图。

这里有一个例子(抱歉因为过长没有换行,换行会破坏CSS):

color_from_middle <- function (data, color1,color2) 
{
  max_val=max(abs(data))
  JS(sprintf("isNaN(parseFloat(value)) || value < 0 ? 'linear-gradient(90deg, transparent, transparent ' + (50 + value/%s * 50) + '%%, %s ' + (50 + value/%s * 50) + '%%,%s  50%%,transparent 50%%)': 'linear-gradient(90deg, transparent, transparent 50%%, %s 50%%, %s ' + (50 + value/%s * 50) + '%%, transparent ' + (50 + value/%s * 50) + '%%)'",
             max_val,color1,max_val,color1,color2,color2,max_val,max_val))
} 

使用一些测试数据:

data <- data.frame(a=c(rep("a",9)),value=c(-4,-3,-2,-1,0,1,2,3,4))

datatable(data) %>%
  formatStyle('value',
              background=color_from_middle(data$value,'red','blue'))

输入图片描述


非常感谢,即使对于多列也完美运行! - Ashley Baldry
嗨@NiceE,我想知道您是否知道如何在gt包中完成相同的事情。更多细节,请参阅我的SO问题https://stackoverflow.com/questions/64442840/r-gt-package-conditional-bars-as-part-of-a-html-table - Jakub.Novotny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接