javascript – d3.js向多行系列图添加图例

前端之家收集整理的这篇文章主要介绍了javascript – d3.js向多行系列图添加图例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何向多行系列图表添加图例?我试过,但没有任何传说显示.

这里的区块:

http://bl.ocks.org/3884955

当各种系列收敛到同一点时,有一个缺陷,如零.所有的标签将被叠加在一起.一个传统的传说,而不是去使用这些标签.

我试过添加这个

  1. var legend = svg.append("g")
  2. .attr("class","legend")
  3. .attr("height",100)
  4. .attr("width",100)
  5. .attr('transform','translate(-20,50)');
  6.  
  7. legend.selectAll('rect')
  8. .datum(function(d) { return {name: d.name,value: d.values[d.values.length - 1]}; })
  9. .append("rect")
  10. .attr("x",width)
  11. .attr("y",function(d,i){ return i * 20;})
  12. .attr("width",10)
  13. .attr("height",10)
  14. .style("fill",function(d) {
  15. return color.domain(d3.keys(d[0]).filter(function(key) { return key !== "day"; }));
  16. });
  17.  
  18. legend.selectAll('text')
  19. .datum(function(d) { return {name: d.name,value: d.values[d.values.length - 1]}; })
  20. .append("text")
  21. .attr("x",i){ return i * 20 + 9;})
  22. .text(function(d) {
  23. return d.name;
  24. });

代码结尾,键名(d.name)与我的数据格式相符,但不显示.有一点,它显示了图表右侧的所有黑框,这意味着我很近,但我错过了一些重要的事情

任何洞察力赞赏

解决方法

Here是一个固定&您的代码重构版本.
  1. var legend = svg.selectAll('g')
  2. .data(cities)
  3. .enter()
  4. .append('g')
  5. .attr('class','legend');
  6.  
  7. legend.append('rect')
  8. .attr('x',width - 20)
  9. .attr('y',i){ return i * 20;})
  10. .attr('width',10)
  11. .attr('height',10)
  12. .style('fill',function(d) {
  13. return color(d.name);
  14. });
  15.  
  16. legend.append('text')
  17. .attr('x',width - 8)
  18. .attr('y',i){ return (i * 20) + 9;})
  19. .text(function(d){ return d.name; });

您需要使用enter(),但是输入()和exit()方法不能与datum()一起使用.从d3 wiki

selection.datum([value])

Gets or sets the bound data for each selected element. Unlike the selection.data method,this method does not compute a join (and thus does not compute enter and exit selections).

猜你在找的JavaScript相关文章