繁体   English   中英

如何在NVD3的饼图中自定义颜色

[英]How to customize color in pie chart of NVD3

我正在尝试使用NVD3 http://nvd3.org/livecode/#codemirrorNav一个饼图。 但我想改变默认颜色。 我该如何改变颜色。 我无法做到。

如果你想使用特定颜色的馅饼

chart.color(function(d){
    return d.data.color
});

然后,将您的数据组织为:

[
  {
    key: "Cumulative Return",
    values: [
      { 
        "label": "One",
        "value" : 29.765957771107,
        "color" : "#8c564b"
      } ,
      { 
        "label": "Three",
        "value" : 32.807804682612,
        "color" : "#e377c2"
      } 
    ]
  }
]

您可以通过将数组传递给'color()'选项来添加颜色。 所以只需添加:

.color(['blue', 'green', 'yellow'])

如果要将这些颜色用于3个元素。

注意:如果您有超过3个元素,则会多次使用某些颜色。

要使用自己的颜色,你必须覆盖现有的颜色,我不想修改原始代码。

所以这就是我所做的。

    var myColors = ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"];
    d3.scale.myColors = function() {
        return d3.scale.ordinal().range(myColors);
    };

    nv.addGraph(function() {
      var chart = nv.models.pieChart()
          .x(function(d) { return d.label })
          .y(function(d) { return d.value })
          .showLabels(true).color(d3.scale.myColors().range());

        d3.select("#chart svg")
            .datum(data)
          .transition().duration(1200)
            .call(chart);

      return chart;
    });

我所做的只是添加.color(d3.scale.myColors().range())


UPDATE :

查看Christopher Chiche的答案,获得完美的解决方案。

.color(['blue', 'green', 'yellow'])

希望这可以帮助。

这是一个注释,让我,我在nv.addGraph中设置chart.color,这不能正常工作,而是使用默认值。 然后我将它设置在此之外,它工作正常。

我使用.color(function(d) {return [d.value > 0 ? 'blue' : 'red']}); 使其根据数据值改变颜色。

希望这能有所帮助。

这是Typescript解决方案,类似于JS版本。 假设您想要10种不同颜色的前10名结果:

在这里,我将为您提供适合我的PieChart或MultiBarChart的示例

  • 创建一个全局颜色数组,如colors = [“#D9D9D9”,“#4B11A6”,....];
  • 数据必须在Object中格式化:myGraph {key:“Title”,values:{streams to push}}
  • 然后在创建数据表时,只需按下每个流的颜色:

let stream = {}; let data = []; 让我= 0;

dataTable.forEach((period) => {
    stream = { 'label': period.key, 'value': period.value, 'color': this.colors[i] };

if(period.value !== 0) {
 data.push(stream);}
 i++;
});
this.myGraph = data;

if条件只是为了防止图中的空片

我用下面的概念来添加自定义颜色:

// for define variable of custom colors 
var colors = ["red", "green", "blue"];
...
chart {
    color: function(d,i){
        return (d.data && d.data.color) || colors[i % colors.length]
    }
}

对于基于JSON数据的动态颜色,只需添加新的json obj color ,如下面的概念。

// or set custom colors directly in the data
data = [{
        key: "One",
        y: 5,
        color: "yellow"
    },{
        key: "Two",
        y: 2,
        color: "gray"
    },{
        key: "Three",
        y: 9
    },
     ...
];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM