Jquery 热图着色

发布于 2024-10-31 10:55:54 字数 193 浏览 1 评论 0原文

我有一个表,每列的值在 -100 到 +100 之间。 我想用低于 0 到 -100 的所有元素对它们进行着色,从白色到深红色。 以及从 0 到 +100 的颜色从白色到深绿色。

关于如何使用 JQuery 调制颜色有什么建议吗?

我在选择器方面遇到了麻烦..所以最好我可以通过 jquery 做一个设置背景 css

谢谢。

I have a table with every column having values between -100 to +100.
I want to color them with all element below zero to -100 going from white to dark red.
and the ones from zero to +100 with colors from white to dark green.

Any suggestion on how I can brew the colors using JQuery?

I am having trouble with selectors .. so best if I can just do a set background css via jquery

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

时光病人 2024-11-07 10:55:54

通过可以计算两个值之间某个点的颜色分量的函数,您可以使用 CSS 中的 rgb(r,g,b) 颜色语法来设置背景颜色:

function morph(start, stop, point) {
  return Math.round(stop - start) * point / 100 + start);
}

$('td').each(function(){
  var value = parseInt($(this).text());
  var color;
  if (value < 0) {
    color = morph(255,100,-value) + ',' + morph(255,0,-value) + ',' + morph(255,0,-value);
  } else {
    color = morph(255,0,value) + ',' + morph(255,50,value) + ',' + morph(255,0,value);
  }
  $(this).css('background-color', 'rgb(' + color + ')');
});

With a function that can calculate a color component at a point between two values, you can use the rgb(r,g,b) color syntax in CSS to set the background color:

function morph(start, stop, point) {
  return Math.round(stop - start) * point / 100 + start);
}

$('td').each(function(){
  var value = parseInt($(this).text());
  var color;
  if (value < 0) {
    color = morph(255,100,-value) + ',' + morph(255,0,-value) + ',' + morph(255,0,-value);
  } else {
    color = morph(255,0,value) + ',' + morph(255,50,value) + ',' + morph(255,0,value);
  }
  $(this).css('background-color', 'rgb(' + color + ')');
});
我是男神闪亮亮 2024-11-07 10:55:54

我可以推荐我自己的 jQuery 插件吗?

jQuery Hottie 可以轻松地采用正常标记并添加背景颜色,如下所示:

<table id="myTable">
    <tr><td>-100</td><td>50</td><td>-30</td></tr>
    <tr><td>100</td><td>0</td><td>-30</td></tr>
    <tr><td>750</td><td>-50</td><td>40</td></tr>
</table>

在 JS 中:

$("#myTable td").hottie({
    colorArray : [ 
        "#F8696B", // highest value
        "#FFFFFF",
        "#63BE7B"  // lowest value
        // add as many colors as you like...
    ]
});

结果:

JSFiddle

JSFiddle

Might I suggest my own jQuery plugin?

jQuery Hottie makes it easy to take normal markup and add a background color like so:

<table id="myTable">
    <tr><td>-100</td><td>50</td><td>-30</td></tr>
    <tr><td>100</td><td>0</td><td>-30</td></tr>
    <tr><td>750</td><td>-50</td><td>40</td></tr>
</table>

And in JS:

$("#myTable td").hottie({
    colorArray : [ 
        "#F8696B", // highest value
        "#FFFFFF",
        "#63BE7B"  // lowest value
        // add as many colors as you like...
    ]
});

Results:

JSFiddle

See this example live in JSFiddle

凶凌 2024-11-07 10:55:54

您可以考虑使用 HeatColor jQuery 插件。但请注意,您想要的精确颜色序列可能不可用。

很好的教程< /a> 可以在 designchemical.com 上找到有关自行开发的信息。

You might consider using the HeatColor jQuery plugin. However, be warned that the precise color sequence you want may not be available.

A good tutorial on rolling your own can be found at designchemical.com.

蓝眼泪 2024-11-07 10:55:54

我在任何需要具有不同级别的绿色(最高值)和红色(最低值)的表上使用以下函数。

(在此示例中,td 值是代表百分比的浮点数 - 例如 0.941 代表 94.1%):

function heatmap()
{
    var heat_max = 0;
    var heat_min = 100;

    //loop through table cells to find min and max values
    $('table#heatmap').find('td').each(function() 
    {
        var cell_val = Math.round(parseFloat($(this).text()) * 1000) / 10;

        if(cell_val > heat_max) { heat_max = cell_val;}
        if(cell_val < heat_min) { heat_min = cell_val;}
    });

    //reloop through table cells and apply background color
    $('table#heatmap').find('td').each(function()
    {
        var cell_val = Math.round(parseFloat($(this).text()) * 1000) / 10;

        var color_pct = (cell_val - heat_min)  / (heat_max - heat_min);
        var color_int = 2 * 255 * color_pct;

        var r = 255, g = 255;
        if(color_int <= 255) { g = color_int;        } 
                       else  { r =  510 - color_int; }

        var bg_color = 'rgba('+r+', '+g+', 50, 0.2)';

        $(this).css({'backgroundColor' : bg_color});
    });

}

I use the following function on any table that needs to have different levels of green (highest value) and red (lowest value).

(In this example td values are floating number representing percentages - like 0.941 for 94.1%):

function heatmap()
{
    var heat_max = 0;
    var heat_min = 100;

    //loop through table cells to find min and max values
    $('table#heatmap').find('td').each(function() 
    {
        var cell_val = Math.round(parseFloat($(this).text()) * 1000) / 10;

        if(cell_val > heat_max) { heat_max = cell_val;}
        if(cell_val < heat_min) { heat_min = cell_val;}
    });

    //reloop through table cells and apply background color
    $('table#heatmap').find('td').each(function()
    {
        var cell_val = Math.round(parseFloat($(this).text()) * 1000) / 10;

        var color_pct = (cell_val - heat_min)  / (heat_max - heat_min);
        var color_int = 2 * 255 * color_pct;

        var r = 255, g = 255;
        if(color_int <= 255) { g = color_int;        } 
                       else  { r =  510 - color_int; }

        var bg_color = 'rgba('+r+', '+g+', 50, 0.2)';

        $(this).css({'backgroundColor' : bg_color});
    });

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文