gpt4 book ai didi

javascript - d3.js 如何在水平对数刻度轴上放置自定义标签

转载 作者:行者123 更新时间:2023-11-29 16:20:41 25 4
gpt4 key购买 nike

我正在使用 d3.js 绘制图表,使用 d3.scale.log 作为 x 轴并结合自定义标签。不幸的是,标签相互碰撞......关于如何使这项工作有任何提示吗?

var width = 400;
var x = d3.scale.log().domain([1, 1000]).range([0, width]);

var formatSi = d3.format(".4s");
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom")
.tickFormat(function(d, i) {
return formatSi(d) + 'Hz'
});

var svg = d3.select("#chart")
.append("svg").attr("width", width)
.attr("height", 200)
.append("g").attr("transform", "translate(20,20)");

([1, 3, 6, 9]).forEach(function(d) {
x.domain([1, Math.pow(10, d)]);
svg.append("g").attr("class", "axis x")
.attr("transform", "translate(0," + d * 2 + "0)")
.call(xAxis);
});​

此代码的一个工作示例在 jsfiddle

最佳答案

想通了。诀窍是使用.tickFormat 来提供格式化函数,而是使用.ticks 方法,该方法反过来将提供的格式化函数应用到比例尺的 .tickFormat 方法。

var width = 400;
var x = d3.scale.log().domain([1, 1000]).range([0, width]);

var formatSi = d3.format(".4s");
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom")
​   .ticks(5,function(d, i) {
        return formatSi(d) + 'Hz';
    });

var svg = d3.select("#chart")
.append("svg").attr("width", width)
.attr("height", 200)
.append("g").attr("transform", "translate(20,20)");

([1, 3, 6, 9]).forEach(function(d) {
x.domain([1, Math.pow(10, d)]);
svg.append("g").attr("class", "axis x")
.attr("transform", "translate(0," + d * 2 + "0)")
.call(xAxis);
});

结果仍然不完全令人满意,因为当刻度线靠近时系统似乎无法放置标签......

关于javascript - d3.js 如何在水平对数刻度轴上放置自定义标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10719598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com