[英]I change the min and max of the xaxis, but how to i change the 'navigator'?
[英]detect overlapping of circle and change xaxis domain from (0,max) to (min,max)
我创建了一个散点图气泡图。 这是两种情况
首先是因为总客户之间的差异非常小,两个圆圈重叠
第二个域从0,max开始
我想要一种方法,以便它自动读取是否有任何两个圆圈重叠,则xaxis的域应为min,max,否则应为0,max
我正在这样创建气泡图
var gnodes = svg.selectAll('g.node')
.data(this.options.data.events)
.enter()
.append('g')
.classed('gnode', true)
.attr("transform", function(d) { return "translate(" + x(d.Total_Customers) + "," + y(d.TotalSales) + ")"; })
.on('mouseover', tip.show)
.on('mouseout', tip.hide);
var circles = gnodes.append("circle").transition().duration(transTime).style("filter","url(#drop-shadow)")
.attr("class", "node").style("fill", function(d) { return color(d.Total_visits);})
.attr("r", function(d,i){ return r(d.Total_visits);});
这是我的xaxis
getX: function(){
var temp = 0//this.getMinX();
return d3.scale.linear().range([0, this.options.width]).domain([temp,this.getMaxX()]);
}
!! 注意:我的气泡图实现不是基于cx和cy。 它的g正在翻译。 在此实现中,我想知道找出重叠的方法。
https://stackoverflow.com/a/8367547/3513695
上面的算法将解决您的问题。下面的函数将根据您的要求查找所需域的最小值
var getDomainMinValue = function(data){
var radiiDiff, radiiSum, centreDist;
for (var i =0 ; i < data.length ; i++) {
for (var j = i+1; j < data.length; j++) {
radiiDiff = Math.pow(r(data[i].Total_visits) - r(data[j].Total_visits),2)
radiiSum = Math.pow(r(data[i].Total_visits) + r(data[j].Total_visits),2)
centreDist = Math.pow(x(data[i].Total_Customers) - x(data[j].Total_Customers),2) + Math.pow(y(data[i].TotalSales) - y(data[j].TotalSales),2)
if((radiiDiff <= centreDist) && (centreDist <= radiiSum)) {
//return the min value
return d3.min(data.map(function(d) { return d.TotalSales }));
}
}
}
// return 0 otherwise
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.