【问题标题】:Adding dynamic tooltips to a streamgraph d3.js向流图 d3.js 添加动态工具提示
【发布时间】:2012-12-21 09:38:24
【问题描述】:

我目前正在处理流图,我想为每一层添加类似于 http://archive.stamen.com/mtvmovies-streamgraph/chart.html 的工具提示

我现在拥有的工具提示根本不起作用。我得到的只是工具提示框中显示的“NaN”。

有什么建议吗??我的代码如下。

提前致谢。

   var customPalette = [
       "#ff7f0e",  "#2ca02c", "#00FFFF", "#d62728", "#9467bd",
      "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"
    ];

    var format = d3.time.format("%y");

    //creating margins around the graph
    var margin = {top: 20, right: 30, bottom: 30, left: 200},
        width = 1200 - margin.left - margin.right,
        height = 500 - margin.top - margin.bottom;

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

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

    //assining custom colors to layers
    var colours = d3.scale.ordinal().range(customPalette);

    var xAxis = d3.svg.axis()
        .scale(x)
        .orient("top")
        .ticks(d3.time.years);

    var yAxis = d3.svg.axis()
        .scale(y)
        .orient("left");

    //ctreate stack layout
    var stack = d3.layout.stack()
        .offset("wiggle")
        .order("reverse")
        .values(function(d) { return d.values; })
        .x(function(d) { return d.date; })
        .y(function(d) { return d.amount; });

    //creates array of datya elements for stacked bar graph
    var nest = d3.nest()
        .key(function(d) { return d.age; });

    //create area
    var area = d3.svg.area()
        //adds curviture
        .interpolate("monotone")
        .x(function(d) { return x(d.date); })
        .y0(function(d) { return y(d.y0); })
        .y1(function(d) { return y(d.y0 + d.y); });

    var svg = d3.select("body").append("svg")
        //defines length of x-axis
        .attr("width", width + margin.left + margin.right)
        //defines height of y-axis
        .attr("height", height + margin.top + margin.bottom)
      .append("g")
        .attr("transform", "translate(" + margin.left + "," + margin.top + ")");


    d3.csv("data6.csv", function(data) {
      data.forEach(function(d) {
        // Convert strings to numbers
        d.date = format.parse(d.date);
        d.amount = +d.amount;
      });

      //returns an array of objects with a key feild (0-20yrs....)
      //and a value array which contains associated records
      var layers = stack(nest.entries(data));

      //.extent() returns min and max values of argument
      x.domain(d3.extent(data, function(d) { return d.date; }));
      //
      y.domain([0, d3.max(data, function(d) { return d.y0 + d.y; })]);

      svg.selectAll(".layer")
          .data(layers)
        .enter().append("path")
          .attr("class", "layer")
          .attr("d", function(d) { return area(d.values); })
          .style("fill", function(d, i) { return colours(i); });

      //CURRENT TOOLTIP CODE
      var toolTip = svg.selectAll("path")
                       .append("svg:title")
                   .text(function(d) { return (d.date) + (d.amount) });;


    svg.append("g")
          .attr("class", "x axis")
          .attr("transform", "translate(0," + 0 + ")")
          .call(xAxis);

    svg.append("g")
          .attr("class", "y axis")
          .call(yAxis);

    });

【问题讨论】:

    标签: javascript d3.js tooltip stream-graph


    【解决方案1】:

    您是希望连接d.dated.close 的值,还是有兴趣添加这些值并返回结果?

    如果是后者: 我敢打赌d.dated.close 的类型不是你所期望的。如果您还没有的话,我建议您放入一些调试代码来检查这些变量的类型。示例:

    //CURRENT TOOLTIP CODE
    var toolTip = svg.selectAll("path")
       .append("svg:title")
       .text(function(d) { 
         console.log('d.date type:' + typeof d.date + 'd.close type:' + typeof d.close);
         return (d.date) + (d.close);
       }
    );
    

    另外,您的代码 sn-p 中该语句的末尾有一个额外的分号。

    如果是前者: 一个或两个都是number 类型,当您使用+ 运算符而不是连接它们时,Javascript 将尝试添加它们。返回字符串:

    .text(function(d) {
      return d.date.toString() + ' ' + d.close.toString();
    });
    

    【讨论】:

    • 是的,我想连接这些值。我实际上想出了一个答案,但工具提示只显示每个流的第一个值。例如,一个流可能以 10,000 的值开始并以 45,000 的值结束。但无论我将鼠标放在那个流中的哪个位置,我都只能得到 10,000 个。有什么建议吗??
    猜你喜欢
    • 2014-05-14
    • 1970-01-01
    • 2017-05-19
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2018-11-24
    相关资源
    最近更新 更多