首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使图例类似于D3 v6中的堆叠条形图(并更改图例的标签)?

如何使图例类似于D3 v6中的堆叠条形图(并更改图例的标签)?
EN

Stack Overflow用户
提问于 2021-05-07 14:22:43
回答 1查看 39关注 0票数 1

我现在正在用D3创建一个堆叠的条形图,并试图添加一个图例来解释数据。但是,我的图例的颜色与堆叠条形图中的颜色不同。

这是我的图表的代码:(我在这里只放了与图例颜色相关的部分,因为整个文件太长了):

代码语言:javascript
复制
let dataset = [{Year:'2006-2007',Energy_Recovery: 44, Disposal : 190, Recycling: 2},
               {Year:'2008-2009',Energy_Recovery: 40, Disposal : 189, Recycling: 1},
               {Year:'2009-2010',Energy_Recovery: 38, Disposal : 180, Recycling: 2},
               {Year:'2010-2011',Energy_Recovery: 41, Disposal : 167, Recycling: 2},
               {Year:'2013-2014',Energy_Recovery: 44, Disposal : 150, Recycling: 7},    
               {Year:'2014-2015',Energy_Recovery: 43, Disposal : 127, Recycling: 21},
               {Year:'2015-2016',Energy_Recovery: 49, Disposal : 117, Recycling: 20},
               {Year:'2016-2017',Energy_Recovery: 47, Disposal : 120, Recycling: 24},
               {Year:'2017-2018',Energy_Recovery: 46, Disposal : 111, Recycling: 24},
               {Year:'2018-2019',Energy_Recovery: 41, Disposal : 109, Recycling: 24}];

let first_stack = ["Energy_Recovery", "Disposal", "Recycling"];
let stack = d3.stack().keys(first_stack).order(d3.stackOrderDescending); 
let series = stack(dataset);

 //Create SVG element
let svg = d3.select("body")
            .append("svg")
            .attr("width", width)
            .attr("height", height);

let colors = d3.scaleOrdinal(d3.schemeCategory10);

var size = 10;
svg.selectAll("mydots")
  .data(first_stack)
  .enter()
  .append("rect")
    .attr("x", 750)
    .attr("y", function(d,i){ return 20 + i*(size+5);}) 
    .attr("width", size)
    .attr("height", size)
    .style("fill", function(d){ return colors(d);});

// Add one dot in the legend for each name.
svg.selectAll("mylabels")
  .data(first_stack)
  .enter()
  .append("text")
    .attr("x", 750 + size*1.2)
    .attr("y", function(d,i){ return 25 + i*(size+5) + (size/2);}) 
    .style("fill", function(d){ return colors(d);})
    .text(function(d){ return d;})
    .attr("text-anchor", "left")
    .style("alignment-baseline", "middle");

有人知道如何处理这个问题吗?还有,谁能帮我把图例中的标签从'Energy_Recovery‘改为'Energy Recovery'?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-07 15:48:44

我不明白你为什么需要这个:

代码语言:javascript
复制
let colors = d3.scaleOrdinal(d3.schemeCategory10);

您可以将colors定义为数组:

代码语言:javascript
复制
const colors = ['orange', 'blue', 'green'];

..。然后按索引将这些颜色分配给图例的点和标签:

代码语言:javascript
复制
svg.selectAll("mydots")
  .data(first_stack)
  .enter()
  .append("rect")
  ...
  .style("fill", (d, i) => colors[i]);

// Add one dot in the legend for each name.
svg.selectAll("mylabels")
  .data(first_stack)
  .enter()
  .append("text")
  ...
  .text(d => d)
  .style("fill", (d, i) => colors[i]);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67429906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档