2014-11-23 57 views
1

我可以在使用这样的事情在我的数据,我图的中心点来绘制网格线:绘制在平均值范围为网格线(或中位数)在d3.js

startX = d3.min(x.domain()), 
endX = d3.max(x.domain()), 
startY = d3.min(y.domain()), 
endY = d3.max(y.domain()); 
lines = [{x1: startX, x2: endX, y1: (startY + endY)/2, y2: (startY + endY)/2}, 
      {x1: (startX + endX)/2, x2: (startX + endX)/2, y1: startY, y2: endY}] 

而且然后渲染线条。

但是,我想要的是数据范围的平均值(和/或中值取决于情况)的值。我尝试了这一点,但该行与上面的代码产量相同。以下是我正在尝试绘制x和y数据范围平均线的完整代码。我认为问题在于我如何定义变量x和y,但我不知道如何调整它们。会发生什么情况是,两条线都以44(垂直x轴44,水平y轴44)绘制。但是,数据集的平均值不都是44.这是水平线的正确值,但不是垂直线。

编辑:发现问题是,我得到的意思是轴线上的值的平均值,这与我的数据集的平均值不同。不知道如何调整这一点,虽然。

var margin = {t:30, r:20, b:20, l:40 }, 
w = 1000 - margin.l - margin.r, 
h = 600 - margin.t - margin.b, 
x = d3.scale.linear() 
.range([0, w]) 

y = d3.scale.linear() 
.range([h - 60, 0]) 

color = d3.scale.category10(); 

var svg = d3.select("#chart").append("svg") 
.attr("width", w + margin.l + margin.r) 
.attr("height", h + margin.t + margin.b); 
fig = svg.append("g").attr("transform", "translate(40, 20)"); 


var xAxis = d3.svg.axis() 
.scale(x) 
.ticks(20) 
.tickSubdivide(true) 
.tickSize(6, 3, 0) 

.orient("bottom"); 


var yAxis = d3.svg.axis() 
.scale(y) 
.ticks(20) 
.tickSubdivide(true) 
.tickSize(6, 3, 0) 
.orient("left"); 

ymean = d3.mean(y.domain()); 
xmean = d3.mean(x.domain()); 
lines = [{x1: startX, x2: endX, y1: ymean, y2: ymean},//horizontal 
     {x1: xmean, x2:xmean, y1: startY, y2: endY}] //vertical 

fig.selectAll(".grid-line") 
.data(lines).enter() 
.append("line") 
.attr("x1", function(d){ return x(d.x1); }) 
.attr("x2", function(d){ return x(d.x2); }) 
.attr("y1", function(d){ return y(d.y1); }) 
.attr("y2", function(d){ return y(d.y2); }) 
.style("stroke", "#000") 

任何建议将有所帮助。谢谢。

编辑:建议,我现在有一个不同的评估员,但行简直不是绘图。这里的更新代码:

ymean = d3.mean(data, function(d) { return d.incidence; }); 
    xmean = d3.mean(data, function(d) { return d.variance; }); 


     lines = [{x1: startX, x2: endX, y1: ymean, y2: ymean}, 
       {x1: xmean, x2:xmean, y1: startY, y2: endY}] 

fig.selectAll(".grid-line") 
.data(lines).enter() 
.append("line") 
.attr("x1", function(d){ return x(d.x1); }) 
.attr("x2", function(d){ return x(d.x2); }) 
.attr("y1", function(d){ return y(d.y1); }) 
.attr("y2", function(d){ return y(d.y2); }) 
.style("stroke", "#000") 

这没有错误,但线条根本不绘制。如果我在我的行变量中替换值,如下所示,结果相同。

lines = [{x1: startX, x2: endX, y1: 50, y2: 50}, 
{x1: xmean, x2:xmean, y1: startY, y2: endY}] 

这暗示了这件作品存在问题,但我不知道它是什么。

回答

0

你要根据你的数据来计算的,而不是你的规模均值和中位数:

ymean = d3.mean(inputData, function(d) { return d.xVal; }); 
xmean = d3.mean(inputData, function(d) { return d.yVal; }); 

这些都是通用的存取功能,如果您需要存取功能的具体指导(中function(d) { return d.xVal; }部分),您需要提供输入数据集的格式

+0

我尝试了类似的方法,但没有奏效。我没有错误,但线条也没有画出来。以下是我如何针对我的数据制定你的记录:'ymean = d3.mean(data,function(d){return d.incidence;}); xmean = d3.mean(data,function(d){return d.variance;}); '“发病率”和“方差”是我的两列,来自简单的csv,有4列。这两列包含数据以绘制我的散点图上的所有点(工作正常),但这些线条不会在正确的位置绘制。 – jonmrich 2014-11-23 12:47:44

+0

我改变了我的代码,并更新了我的问题。也许这会更有意义。毕竟,我认为还有一个完全不同的问题。 – jonmrich 2014-11-23 12:57:14