Svg 创建在d3中具有绝对值的轴

Svg 创建在d3中具有绝对值的轴,svg,d3.js,Svg,D3.js,我在d3中创建了一个带有负值的条形图。图表显示了两队在一系列比赛中的得分差异,因此如果a队以三分之差战胜B队,数据点为-3。如果B队以三比三获胜,则数据点为3 图形本身很好,但我希望轴反映数据点的绝对值。我试过: var xAxis = d3.svg.axis() .scale(Math.abs(x)) .orient("top"); 但这似乎并不奏效。欢迎任何想法 谢谢, Jon此行为没有文档记录,但可以通过以下方式将函数传递到tickFormat: tickFormat(M

我在d3中创建了一个带有负值的条形图。图表显示了两队在一系列比赛中的得分差异,因此如果a队以三分之差战胜B队,数据点为-3。如果B队以三比三获胜,则数据点为3

图形本身很好,但我希望轴反映数据点的绝对值。我试过:

var xAxis = d3.svg.axis()
    .scale(Math.abs(x))
    .orient("top");
但这似乎并不奏效。欢迎任何想法

谢谢,
Jon

此行为没有文档记录,但可以通过以下方式将函数传递到
tickFormat

tickFormat(Math.abs)
您甚至可以制作更复杂的格式,例如:

tickFormat(function (v) {
    return Math.abs(v) + '%';
})
看着照片,我找不到这种行为的任何证据。所以,看起来这并不是我们所期望的,但它还是起作用了。这只是一个猜测,但可能传递的函数在底层的某个地方被调用


p.S.:OP已经回答了这个问题,但我在这里发布它是为了让其他人更容易找到它。

我觉得轴的设置不太正确
scale
应该链接回一个
d3.scale
函数,因此类似于
d3.scale.linear()
。d3标尺将具有输出
范围
和输入
。您需要使用类似于
d3.extent(数据,函数(d){return Math.abs(d);}的内容来计算域。
若要查看此所有不活动,请查看此内容。抱歉。我知道我没有说清楚。我对整个编码工作还比较陌生。我计算了一个d3.scale.linear()和一个域。图表本身画得很好。我想做的是给轴贴上标签,这样它就不会显示-3,-2,-1,0,1,2,3,而是显示3,2,1,0,1,2,3,即使图形本身会画负bard。从本质上说,这张图表:但轴的两边都显示正数。啊,这完全是另一回事。以某种方式使用序数刻度如何。或者您可以关闭轴上的标签,计算数字的位置
[3,2,1,0,1,2,3]
,然后编写一个自定义轴标签将其写入其中。计算位置很容易,因为已经有轴了。希望这能有所帮助。今天终于能够重新开始这方面的工作,并在您提到自定义轴后找到解决方案。使用了.tickFormat(Math.abs),这就成功了。谢谢你的帮助。