javascript - D3轴标签刻度

标签 javascript d3.js

尝试学习 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/

相关文章:

javascript - 使用 dns.lookup() node.js 按域获取 IP 地址

javascript - Nodejs - promise ,未处理的终止和内存泄漏

javascript - 使用力导向布局了解 D3.js 中的 "call"

javascript - div 部分中的 d3 图

javascript - jQuery:从 jquery 1.2.6 更改为 1.3.2 时验证插件中断

javascript - Reactjs 在 setState 之后丢失了 touchmove

javascript - 如何使用 jQuery.inArray 方法选择一组唯一的随机数(无重复)?

javascript - 函数不识别变量

javascript - 将图表更改为自下而上而不是从左到右

javascript - D3.js 无法从 json 文件渲染我的圈子