D3工具提示小倍数

时间:2015-08-13 16:06:15

标签: javascript d3.js

我无法在小倍数d3图表(带有d3-tip)的每个圆圈上显示工具提示。我有以下错误消息:“未捕获的TypeError:无法设置属性'x'的null”。

我认为问题在于我的“tip”变量的定义。我不确定应该定义哪个键。

有人有提示吗?

提前谢谢你,

Florent的

<script>

var margin = {top: 8, right: 10, bottom: 2, left: 10},
    width = 635 - margin.left - margin.right,
    height = 50 - margin.top - margin.bottom;

var parseDate = d3.time.format("%Y.%m.%d").parse;

var x = d3.time.scale()
    .range([0, width]);

var y = d3.scale.linear()
    .range([height, 0]);

var area = d3.svg.area()
    .x(function(d) { return x(d.date); })
    .y0(height)
    .y1(function(d) { return y(d.value); });

var line = d3.svg.line()
    .x(function(d) { return x(d.date); })
    .y(function(d) { return y(d.value); });



d3.csv("data.csv", type, function(error, data) {
  var keys = d3.nest()
      .key(function(d) { return d.key; })
      .sortValues(function(a,b) { return d3.ascending(a.date, b.date)})
      .entries(data);

  x.domain([
    d3.min(keys, function(key) { return key.values[0].date; }),
    d3.max(keys, function(key) { return key.values[key.values.length - 1].date; })
  ]);

  var svg = d3.select("body").selectAll("svg")
      .data(keys)
    .enter().append("svg")
      .attr("width", width + margin.left + margin.right)
      .attr("height", height + margin.top + margin.bottom)
    .append("g")
      .attr("transform", "translate(" + margin.left + "," + margin.top + ")")
      .each(multiple);

  svg.append("text")
      .attr("x", width - 6)
      .attr("y", height - 6)
      .style("text-anchor", "end")
      .text(function(d) { return d.key; });

});

var tip = d3.tip()
  .attr('class', 'd3-tip')
  .offset([-10, 0])
  .html(function(d) {
    return "<strong>" + d.value + "</strong>"
    // + "\t" 
    // + year.values + "</strong><br/><span style='color:#fff'>" + value.values + " députés élus"
    ;
  })

function multiple(key) {
  var svg = d3.select(this);

  y.domain([0, d3.max(key.values, function(d) { return d.value; })]);

  svg.append("path")
      .attr("class", "area")
      .attr("d", area(key.values));

  svg.append("path")
      .attr("class", "line")
      .attr("d", line(key.values));


 svg.selectAll(".circle")
     .data(key.values)
     .enter()
     .append("svg:circle")
     .attr("class", "circle")
     .attr("cx", function (d, i) {
     return x(d.date);
 })
     .attr("cy", function (d, i) {
     return y(d.value);
 })
     .attr("r", 5)
     .on('mouseover', tip.show)
     .on('mouseout', tip.hide)
     console.log(key.values)

}

1 个答案:

答案 0 :(得分:6)

我有同样的问题。我认为这可能是一个问题,因为没有“x&x;或者&#39; y&#39;值。事实证明我只是缺席了

svg.call(tip);