【问题标题】:D3 Tooltip on small multiplesD3 小倍数的工具提示
【发布时间】:2015-08-13 16:06:15
【问题描述】:

我无法在小的倍数 d3 图表(使用 d3-tip)中的每个圆圈上显示工具提示。我收到以下错误消息:“Uncaught TypeError: Cannot set property 'x' of null”。

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

有人有提示吗?

提前谢谢你,

弗洛伦特

<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)

}

【问题讨论】:

  • 错误信息从何而来?
  • 在控制台中,当我的鼠标在圆圈上时(应该显示工具提示)。
  • 是哪行代码导致的?
  • 不清楚:未捕获的类型错误:无法设置 null p @ d3.tip.min.js:1 o @ d3.tip.min.js:1 t.show @ d3 的属性“x” .tip.min.js:1(匿名函数)@d3.min.js:1
  • 哦,你还没有设置,是吗? svg.call(tip)

标签: javascript d3.js


【解决方案1】:

我有同样的问题。我认为这可能是圆圈没有“x”或“y”值的问题。原来我只是错过了

svg.call(tip);

【讨论】:

  • 确实如此。现在,我永远不会忘记 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-09
  • 2022-11-17
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
相关资源
最近更新 更多