D3轴标签刻度

问题描述 投票:1回答:1

试图学习D3并在标签轴上似乎相互叠加。我试图将规模调用转换为可重用的函数,但这可能会加剧这个问题。数据:

data=[];
data.push({'label':'#1','cost':15000,'saving':18000});
data.push({'label':'#2','cost':40000,'saving':65000});
data.push({'label':'#3','cost':55000,'saving':80000});
data.push({'label':'#4','cost':15000,'saving':30000});

规模:

function getY(d){
    return yScale = d3.scaleBand()
        .domain(d3.range(0, d.length))
        .range([0, (height-20)])
        .paddingInner(0.1)
        .paddingOuter(0.1)
}

试图建立轴:

labels=[]
$.each(data,function(){
    labels.push(this.label);
})
var hAxis = d3.axisRight()
    .scale( getY(data) )
    .tickValues( labels )

一切似乎都在起作用,但标签似乎在翻译中收到了不正确的内容:

<g class="tick" opacity="1" transform="translate(0,NaN)"><line stroke="#000" x2="6">

从哪里收到NaN,我假设编码不正确。

小提琴:https://jsfiddle.net/L9mmy5d6/

javascript d3.js
1个回答
0
投票

tickValues指定哪些值应该有刻度,而不是那些刻度应该是什么样子。您只能在此处指定比例域中的值。

如果你想要一个标准化的改变(比如,为每个数字添加#(并且递增1以使数字从1开始)),那么你可以使用:

var hAxis = d3.axisRight()
    .scale( getY(data) )
    .tickFormat(function(d,i) { return "#"+(d+1) } )

(Qazxswpoi)

或者,如果您想采用与您相同的方法,可以使用以下方法:

fiddle

(Qazxswpoi)

请记住,如果使用索引,您的刻度数应与标签数相对应。在这种情况下,您也可以使用var hAxis = d3.axisRight() .scale( getY(data) ) .tickFormat(function(d,i) { return labels[i] }) 来设置标签,因为刻度线对应于索引。

© www.soinside.com 2019 - 2024. All rights reserved.