Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svg 如何将自定义颜色添加到d3中甜甜圈图表中的特定圆弧?_Svg_D3.js_Crossfilter - Fatal编程技术网

Svg 如何将自定义颜色添加到d3中甜甜圈图表中的特定圆弧?

Svg 如何将自定义颜色添加到d3中甜甜圈图表中的特定圆弧?,svg,d3.js,crossfilter,Svg,D3.js,Crossfilter,我正在尝试建立一个油炸圈饼图表。如何添加特定于圆弧的不同颜色。例如,我想要红色表示状态“一”,蓝色表示状态“二”,绿色表示状态“三”,等等 我试了以下方法 var color = d3.scale.ordinal() .domain(["one","two","three","four","five"]) .range(["#013ADF", "#ACFA58", "#DF3A01", "#6b486b", "#a05d56"]); paths.enter().append("svg:p

我正在尝试建立一个油炸圈饼图表。如何添加特定于圆弧的不同颜色。例如,我想要红色表示状态“一”,蓝色表示状态“二”,绿色表示状态“三”,等等

我试了以下方法

var color = d3.scale.ordinal()
 .domain(["one","two","three","four","five"])
 .range(["#013ADF", "#ACFA58", "#DF3A01", "#6b486b", "#a05d56"]);


paths.enter().append("svg:path")
        .attr("stroke", "white")
        .attr("stroke-width", 0.5)
        .attr("fill", function(d, i) {console.log(color(d.name)); return color(d.name); })
最初我能得到颜色。但是当任何状态计数减少到0时,颜色会被洗牌。当我再次增加状态计数时,我无法恢复特定的颜色


请提供一些建议帮助……

您最好每次都更新颜色,而不仅仅是在enter()中


您最好每次都更新颜色,而不仅仅是在enter()中


控制台日志是怎么说的?如果手动调用,
color
函数是否有效?@Lars Kotthoff color(d.name)在控制台中最初返回正确的颜色代码。。但当我的状态计数值减为零并再次增加时,问题就出现了,我的颜色被洗牌。。。有什么解决办法吗?你说的“颜色被洗牌”是什么意思?您是否正在动态修改
颜色
?如何获得状态计数?最初我假设红色为状态“一”,但当状态计数减少到零时,红色被分配到其他状态。我不会在初始化后改变我的颜色。状态计数是多少,它与颜色有什么关系?我在你的代码中看不到。控制台日志怎么说?如果手动调用,
color
函数是否有效?@Lars Kotthoff color(d.name)在控制台中最初返回正确的颜色代码。。但当我的状态计数值减为零并再次增加时,问题就出现了,我的颜色被洗牌。。。有什么解决办法吗?你说的“颜色被洗牌”是什么意思?您是否正在动态修改
颜色
?如何获得状态计数?最初我假设红色为状态“一”,但当状态计数减少到零时,红色被分配到其他状态。我不会在初始化后改变我的颜色。状态计数是多少,它与颜色有什么关系?我在你的代码里看不到。
paths.enter().append("svg:path")
    .attr("stroke", "white")
    .attr("stroke-width", 0.5)

path.attr("fill", function(d, i) {console.log(color(d.name)); return color(d.name); })