尝试学习 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 是从哪里接收的,我假设编码比例不正确。
fiddle : https://jsfiddle.net/L9mmy5d6/
最佳答案
tickValues
指定哪些值应该有刻度,而不是这些刻度应该是什么样子。您只能在此处指定比例域中的值。
如果您想要进行标准化更改(例如,向每个数字添加 #(并递增 1,以便数字从 1 开始)),那么您可以使用:
var hAxis = d3.axisRight()
.scale( getY(data) )
.tickFormat(function(d,i) { return "#"+(d+1) } )
( fiddle )
或者,如果您想采用与现有方法相同的方法,您可以使用类似以下内容的方法:
var hAxis = d3.axisRight()
.scale( getY(data) )
.tickFormat(function(d,i) { return labels[i] })
( fiddle )
请记住,如果使用索引,您的刻度数应与标签数相对应。在这种情况下,您还可以使用 d
设置标签,因为刻度线对应于索引。
关于javascript - D3轴标签刻度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47892231/