【问题标题】:NVD3.js coloring specific bars in graphNVD3.js 为图中的特定条形着色
【发布时间】:2013-04-11 11:46:31
【问题描述】:

有没有办法为特定的条形着色?如果条形小于线,则将其涂成红色。

代码:https://github.com/tvinci/webs/blob/gh-pages/lineplusbar.html

示例:http://tvinci.github.io/webs/lineplusbar.html

我想做这样的事情,但 i 的值不是我发送的 y 值。它已被修改:

d3.selectAll("rect.nv-bar")
    .style("fill", function(d, i){
        return i > 50 ? "red":"blue";
    });

数据:

var overview_data=[
     {
        "key" : "Achieved",
        "bar": true,
        "values" : [ [ "1x" , 30] , [ "2x" , 70] , [ "3x" , 200] ]
     },
     {
        "key" : "Required",
        "values" : [ [ "1x" , 50] , [ "2x" , 100] , [ "3x" , 150] ]
     }
].map(function(series) {
    series.values = series.values.map(function(d) { return {x: d[0], y: d[1] } });
    return series;
});

【问题讨论】:

    标签: svg d3.js nvd3.js


    【解决方案1】:

    你可以这样做:

    d3.selectAll("rect.nv-bar")
        .style("fill", function(d, i){
            return d.y > 50 ? "red":"blue";
        });
    

    【讨论】:

      【解决方案2】:

      向上的答案是正确的,但是当您在我的情况下动态更改数据时它不会起作用。

      您可以使用以下配置根据值获取不同的条形颜色。

      var data=[ {
              "key": "data",
              "values": [
                {
                  "x": 1,
                  "y": 20
                },
                {
                  "x": 2,
                  "y": 15
                },
                {
                  "x": 3,
                  "y": 85
                },
                {
                  "x": 4,
                  "y": 66
                },}];
      
      nv.addGraph(function() {
          var chart = nv.models.multiBarChart()
            .barColor(getColorArrayForGraph())
            .transitionDuration(350)
            .reduceXTicks(true)   
            .rotateLabels(0)      
            .showControls(true)   
            .groupSpacing(0.1);
          chart.xAxis
              .tickFormat(d3.format(',f'));
      
          chart.yAxis
              .tickFormat(d3.format(',.1f'));
      
          d3.select('#chart1 svg')
              .datum(data)
              .call(chart);
      
          nv.utils.windowResize(chart.update);
      
          return chart;
      }
      
       // GET color array based on the value
        function getColorArrayForGraph() {
          let colorArray: any = [];
          for (let item of data) {
            if (item.y > 50) {
              colorArray.push('#FF0000');
            } else {
              colorArray.push('#004c00');
            }
          }
          return colorArray;
        };
      

      因此,barcolor(["#FF0000","#00FFCC",....]) 函数将参数作为颜色数组。

      这样你可以得到颜色数组并将其用于barcolor()。

      【讨论】:

      • linePlusBarChart 的情况下不起作用。 BarColor 函数未定义。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多