如何在响应式resize()函数中包含图例

时间:2017-01-11 09:31:48

标签: d3.js resize legend responsive

我的折线图显示在折线图的右上方。放置它的代码是:

var legend = chart.append("g")
  .attr("class", "legend")
  .selectAll("g")
  .data(chiefs)
  .enter().append("g");

legend.append("circle")
  .attr("cy", function(d, i) {
    return i * 20;
  })
  .attr("cx", width * 0.9 - 10)
  .attr("r", 4)
  .attr("fill", function(d) {
    return color(d);
  });

legend.append("text")
  .attr("y", function(d, i) {
    return i * 20 + 5;
  })
  .attr("x", width * 0.9)
  .text(function(d) {
    return d;
  })

除图例外,使用resize()函数对整个图表做出响应:

function resize() {
  var width = parseInt(d3.select(".chart").style("width")) - margin*2,
  height = parseInt(d3.select(".chart").style("height")) - margin*2;

  xScale.range([0, width]).nice(d3.time.year);
  yScale.range([height, 0]).nice();

  chart.select('.xaxis').style("display", "initial");
  chart.select('.yaxis').style("display", "initial");
  chart.select(".last")
    .style("display", "none");
  chart.select(".first")
    .style("display", "none");

  chart
    .attr("width", width + margin*2)
    .attr("height", height + margin*2)

  chart.select('.xaxis')
    .attr("transform", "translate(0," + height + ")")
    .call(xAxis);

  chart.select('.yaxis')
    .call(yAxis);

  chart.selectAll('.line')
    .remove();

  nested_data.forEach(function(d) {
    chart.append("path")
      .attr("class", "line")
      .attr("d", line(d.values))
      .attr("stroke", color(d.key))
  });

}

如何将图例添加到resize()功能,以便它也能响应?

我尝试包含以下代码,但它不正确:

chart.select('.legend')
  .call(legend)

0 个答案:

没有答案