Javascript d3.js如何在水平对数缩放轴上放置自定义标签
我正在使用d3.js为x轴绘制一张图表,该图表使用了Javascript d3.js如何在水平对数缩放轴上放置自定义标签,javascript,d3.js,Javascript,D3.js,我正在使用d3.js为x轴绘制一张图表,该图表使用了d3.scale.log和一个自定义标签。不幸的是,这些标签相互碰撞。。。关于如何使这项工作的任何提示 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")
d3.scale.log
和一个自定义标签。不幸的是,这些标签相互碰撞。。。关于如何使这项工作的任何提示
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);
});
这段代码的一个工作示例在上。诀窍是不要使用
.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);
});
结果仍然不完全令人满意,因为当刻度接近时,系统似乎难以放置标签…这对我不起作用,我有一个x轴上有用户名的条形图,我不能跳过“刻度”,它将跳过用户名,但显示该名称的数据。除此之外,它也不起作用。d3.V3这对我也不起作用,我得到的是
对象函数。。没有方法“替换”
。