D3为特定系列分配颜色

蒙杜兹

我想为数据中的两个系列分配两种颜色,以便当我按升序或降序排序时,每个组的颜色保持相同。

数据以编程方式从网络地图功能中提取。我以为我可以使用交替功能来分配颜色,但是如果我使用排序,这是行不通的。我正在尝试寻找一种适当的方法来为系列指定颜色。

我正在使用的数据将OL和NOL分为两组。您可以在下面看到其结构。

jsfiddle

相关代码:

var values = feature.properties;              
var data = [
    {name:"N11OL",value:values["N11OL"]},
    {name:"N11NOL",value:values["N11NOL"]},
    {name:"N21OL",value:values["N21OL"]},
    {name:"N21NOL",value:values["N21NOL"]},
    {name:"N22OL",value:values["N22OL"]},
    {name:"N22NOL",value:values["N22NOL"]},
    {name:"N23OL",value:values["N23OL"]},
    {name:"N23NOL",value:values["N23NOL"]},
    {name:"N31_33OL",value:values["N31_33OL"]},
    {name:"N31_33NOL",value:values["N31_33NOL"]},
    {name:"N41OL",value:values["N41OL"]},
    {name:"N41NOL",value:values["N41NOL"]}
];

var Colors =  ["#a6cee3", "#1f78b4"]

var margin = {top: 40, right: 2, bottom: 30, left: 180},
    width = 400 - margin.left - margin.right,
    height = 575 - margin.top - margin.bottom,
    barHeight = height / data.length;

// Scale for X axis
var x = d3.scale.linear()
    .domain([0, d3.max(data, function(d){return d.value;})])
    .range([0, width]);

var y = d3.scale.ordinal()
    .domain(["NAICS11", "NAICS21", "NAICS22", "NAICS23", "NAICS31-33", "NAICS41"])
    .rangeRoundBands([0, height]);

//y axis
var yAxis = d3.svg.axis()
    .scale(y)
    .orient("left")
    .outerTickSize(0);

var svg = d3.select(div).select("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
    .append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")")
    .classed("chart", true);

svg.append("g")
    .attr("class", "y axis")
    .call(yAxis);

var bar = svg.selectAll("g.bar")
    .data(data)
    .enter()
    .append("g")
    .attr("transform", function(d, i) { return "translate(0," + i * barHeight + ")"; });

bar.append("rect")
    .attr("width", function(d){return x(d.value);})
    .attr("fill", function(d, i) {return Colors[i % 2]; }) //Alternate colors
    .attr("height", barHeight - 1);

bar.append("text")
    .attr("class", "text")
    .attr("x", function(d) { return x(d.value) - 3; })
    .attr("y", barHeight / 2)
    .attr("dy", ".35em")
    .text(function(d) { return d.value; })
    .attr("fill", "white")
    .attr("font-family", "sans-serif")
    .attr("font-size", "14px")
    .attr("text-anchor", "end");

 svg.append("text")
  .attr("class", "title")
  .attr("x", width/7)
  .attr("y", 0 - (margin.top / 2))
  .attr("text-anchor", "middle")
  .text("Employment by industry " + "(Total OL: " + feature.properties.IndOLTot + ")");
埃姆兰

从jsFiddle的第241行开始

  bar.append("rect")
        .attr("width", function(d){return x(d.value);})
        .attr("fill", function(d, i) {
            if(d.name.indexOf("NOL") > -1) {
                //return Colors[0];
                return "red";
            } else {
                //return Colors[1];
                return "black";
            } 
        }) //Alternate colors
        .attr("height", barHeight - 1);

这将检查子字符串“ NOL”的名称属性。如果名称包含“ NOL”,则使用第一种颜色;如果未找到“ NOL”,则使用第二种颜色进行填充。

(我假设该系列由名称决定)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在D3 Dimple中为不同的线条和线条系列正确分配单独的颜色?

来自分类Dev

d3饼图颜色分配给弧

来自分类Dev

为D3中的每个条添加不同的颜色

来自分类Dev

从d3中的系列创建系列

来自分类Dev

我想要每个节点 d3 的特定路径颜色

来自分类Dev

为Seaborn热图分配特定颜色

来自分类Dev

如何在D3中对数组排序而不影响分配的颜色顺序

来自分类Dev

如何为D3条形图分配随机颜色?

来自分类Dev

D3:如何为项目分配大小和颜色(碰撞检测可视化)

来自分类Dev

如何在D3中对数组排序而不影响分配的颜色顺序

来自分类Dev

使用plot3D为特定颜色的行着色

来自分类Dev

D3多系列图表

来自分类Dev

如何在D3中为饼图添加标签颜色?

来自分类Dev

如何在d3 javascript中为SVG文本元素分配唯一ID

来自分类Dev

d3图形内的文字颜色

来自分类Dev

更改地图D3的颜色

来自分类Dev

D3 rect +颜色不显示

来自分类Dev

更改图表d3的颜色

来自分类Dev

用颜色填充D3箭头

来自分类Dev

D3 rect +颜色不显示

来自分类Dev

将特定的RGB颜色分配给3d网格/表面/点

来自分类Dev

如何在图像图中为NA分配特定的颜色

来自分类Dev

为Google图表中的特定列分配颜色

来自分类Dev

为Matplotlib饼图中的数据分配特定的颜色

来自分类Dev

为值分配颜色

来自分类Dev

为值分配颜色

来自分类Dev

为ArrayList分配颜色

来自分类Dev

如何在 D3 中为文本 div 的特定部分着色?

来自分类Dev

如何在d3图表中命名该系列?