D3.JS:多系列折线图,显示所有日期的工具提示吗?

狮子王

我已经创建了带有工具提示的多系列折线图。请在此JSFiddle中进行检查

当前,工具提示可以按预期工作:当您将鼠标悬停在一个圆圈上时,它会显示一个工具提示,其中包含该点的数据值。

var tooltip = d3.tip()
  .attr('class', 'tooltip')
  .offset([-10, 0])
  .html(function (d) {
    return '<strong>Population ' + (d.date).getFullYear() + ':</strong> ' + format(d.population) + ' people';
  });

svg.call(tooltip);

...

city.selectAll('.circle')
  .data( function(d) { return(d. 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.population);
  })
  .attr('r', 5)
  .on('mouseover', tooltip.show)
  .on('mouseout', tooltip.hide)

但是,我想在所有具有该x值的数据点处打开工具提示。所以它看起来像这样:

工具提示的想法

当然,这些点应具有正确的值。

我如何修改我的代码来实现这一目标?任何帮助是极大的赞赏!

标记

怎么样:

var tooltip = d3.tip()
  .attr('class', 'tooltip')
  .offset([-10, 0])
  .html(function (d) {   
    for (var i = 0; i < data.length; i++){
      if (data[i].date === d.date){
        return '<strong>Population ' + (d.date).getFullYear() + '</strong><br/> City 1: ' + format(data[i].City1) + ' people <br/> City 2: ' + format(data[i].City2) + ' people <br/> City 4: ' + format(data[i].City3) + ' people <br/> City 4: ' + format(data[i].City4) + ' people';
      }
    }
  });

完整代码(在此处显示小提琴):

var myData = "date,City1,City2,City3,City4\n\
20100101,85328,19658,33384,37822\n\
20110101,73527,20295,31127,37130\n\
20120101,71092,20394,31038,34788\n\
20130101,75263,19520,30751,33868";

var margin = { top: 50, right: 50, bottom: 50, left: 50 },
  width = 600 - margin.left - margin.right,
  height = 400 - margin.top - margin.bottom;
    
var format = d3.format(',.');
var parseDate = d3.time.format('%Y%m%d').parse;

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

var xAxis = d3.svg.axis()
  .scale(x)
  .orient('bottom');

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

var yAxis = d3.svg.axis()
  .scale(y)
  .orient('left')
  .tickFormat(format);

var color = d3.scale.category10();

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

var svg = d3.select('body').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 + ')');

var tooltip = d3.tip()
  .attr('class', 'tooltip')
  .offset([-10, 0])
  .html(function (d) {   
    for (var i = 0; i < data.length; i++){
      if (data[i].date === d.date){
        return '<strong>Population ' + (d.date).getFullYear() + '</strong><br/> City 1: ' + format(data[i].City1) + ' people <br/> City 2: ' + format(data[i].City2) + ' people <br/> City 4: ' + format(data[i].City3) + ' people <br/> City 4: ' + format(data[i].City4) + ' people';
      }
    }
  });

svg.call(tooltip);

var data = d3.csv.parse(myData);

color.domain(d3.keys(data[0]).filter(function(key) { return (key !== 'date'); }));

data.forEach(function(d) {
  d.date = parseDate(d.date);
});

var cities = color.domain().map(function(name) {
  return {
    name: name,
    values: data.map(function(d) {
      return {date: d.date, population: +d[name]};
    })
  };
});

x.domain(d3.extent(data, function(d) { return d.date; }));

y.domain([
  0, d3.max(cities, function(c) { return d3.max(c.values, function(v) { return v.population; }); })
]);

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

var city = svg.selectAll('.region')
.data(cities)
.enter().append('g')
.attr('class', 'region');

city.append('path')
  .attr('class', 'line')
  .attr('d', function(d) { return line(d.values); })
  .style('stroke', function(d) { return color(d.name); });

city.selectAll('.circle')
  .data( function(d) { return(d. 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.population);
  })
  .attr('r', 5)
  .on('mouseover', tooltip.show)
  .on('mouseout', tooltip.hide)		
.axis path, .axis line {
	fill: none;
	stroke: #000;
	shape-rendering: crispEdges;
}

.line {
	fill: none;
	stroke: #444;
	stroke-width: 2px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src="https://rawgit.com/Caged/d3-tip/master/index.js"></script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

d3.js多系列折线图工具提示问题

来自分类Dev

d3.js-多系列折线图工具提示问题

来自分类Dev

透视JSON的D3多系列折线图

来自分类Dev

d3多折线图工具提示值数据未定义

来自分类Dev

D3折线图无法正确显示工具提示和数据点

来自分类Dev

D3折线图无法正确显示工具提示和数据点

来自分类Dev

如何使用D3 js在折线图中使用工具提示

来自分类Dev

如何使用D3 js在折线图中使用工具提示

来自分类Dev

这个 D3 多系列折线图中的 row 函数有什么作用?

来自分类Dev

D3.js折线图工具提示问题

来自分类Dev

在d3.js折线图中永久显示工具提示

来自分类Dev

创建折线图的D3工具提示时出现问题

来自分类Dev

使用javascript折线图中的d3工具提示位置问题

来自分类Dev

D3多系列折线图从tsv文件获取我的国家/地区数据

来自分类Dev

D3过渡时退出多系列折线图标签

来自分类Dev

D3.js:使用长格式数据在多系列折线图中的现有折线上绘制点

来自分类Dev

D3的简单多折线图

来自分类Dev

使用D3更新多折线图的模式

来自分类Dev

D3 –折线图问题

来自分类Dev

d3累积折线图

来自分类Dev

带有工具提示的d3.js移动平均折线图(自定义插值)

来自分类Dev

具有图例和D3v 3.5.13的工具提示的简单D3折线图中的错误

来自分类Dev

d3多折线图,具有不同的功能/变量名称

来自分类Dev

具有JSON数据的D3可重用多折线图

来自分类Dev

带有Angular-cli的D3 V4多折线图

来自分类Dev

具有JSON日期的D3 v4折线图

来自分类Dev

D3.js:使用长格式数据在多系列折线图中的现有线上绘制点

来自分类Dev

D3 - 折线图,没有值时不显示线

来自分类Dev

多行D3.js折线图中的样式工具提示

Related 相关文章

热门标签

归档