如何为森伯斯特上的每个节点分配不同的颜色?

时间:2019-06-10 09:18:04

标签: javascript d3.js colors sunburst-diagram

我正在为大数据创造阳光。为了使其更具可读性,我需要为每个节点分配不同的颜色(最好为每个子树分配相同颜色的不同阴影)。

我已经尝试过:

 d3.scaleSequential()
 d3.scale.ordinal()
 d3.scale.category20c()

我认为它可以正常工作,但是我不确定确切的位置。目前,每个子树只能使用一种颜色。

 var width = 500;
 var height = 500;
 var radius = Math.min(width, height) / 2;
 var color = d3.scaleSequential().domain([1,10]).interpolator(d3.interpolateViridis);

 var g = d3.select('svg')
   .attr('width', width)
   .attr('height', height)
   .append('g')
   .attr('transform', 'translate(' + width / 2 + ',' + height / 2 + ')');

 var partition = d3.partition() //.layout
   .size([2 * Math.PI, radius]);


 d3.json("file:///c:\\Users\\c1972519\\Desktop\\Stage\\tests_diagrams\\figure_4.8_ex3\\data2.json", function(error, nodeData){
       if (error) throw error;

       var root = d3.hierarchy(nodeData)
         .sum(function(d){
             return d.size;
           });

       partition(root);
       var arc = d3.arc()
         .startAngle(function(d) { return d.x0; })
         .endAngle(function(d) { return d.x1; })
         .innerRadius(function(d) { return d.y0; })
         .outerRadius(function(d) { return d.y1; });

       var arcs = g.selectAll('g')
         .data(root.descendants())
         .enter()
         .append('g')
         .attr("class", "node")
         .append('path')
         .attr("display", function (d) { return d.depth ? null : "none"; })
         .attr("d", arc)
         .style('stroke', '#fff')
         .style("fill", function(d){return color(d)});
 }

所以我想在每个子树上使用不同的阴影,以使其更具可读性。

有人有主意吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用scaleLinear。

var x = d3.scaleLinear([10,130],[0,960]);

 or

var color = d3.scaleLinear([10,100],[“ brown”,“ steelblue”]);

示例:

https://bl.ocks.org/starcalibre/6cccfa843ed254aa0a0d

文档https://github.com/d3/d3-scale/blob/master/README.md#scaleLinear

线性刻度

d3.scaleLinear([[domain,] range])<>

使用指定的域和范围构造新的连续刻度,禁用默认的内插器和钳位。如果未指定域或范围,则每个域默认为[0,1]。对于连续的定量数据,线性标度是一个很好的默认选择,因为它们保留了比例差异。每个范围值y均可表示为域值x的函数:y = mx + b。