SNT*_*SNT 3 label bar-chart d3.js
我正在尝试使用 d3js 创建一些条形图。我使用相同的 js 作为模板并传递不同的数据来显示图表。如果它们少于 10 个数据点,则 x 轴标签看起来不错。但是,如果它们的数据点超过 10 个,则 x 轴标签会重叠和聚集。所以我试图找出一种方法,我可以跳过每 4 个滴答声。下面是代码。当大于 9 个数据点时,它根本不显示任何刻度。
` var ticks = d3.selectAll(".tick text");
function tickLabels(dataLength, d) {
if (dataLength < 9) return "";
return ticks.attr("class", function(d,i){
if(i%3 != 0) d3.select(this).remove();
})
}
var xAxis = d3.axisBottom().scale(x)
.ticks()
.tickFormat(function(d,i) { return tickLabels(all.length, d) })
`
Run Code Online (Sandbox Code Playgroud)
有两种方法可以做你想做的事。第一个是使用tickFormat.
所以,假设你有这个拥挤的轴:
var svg = d3.select("svg");
var data = d3.range(30).map(function(d) {
return "tick" + d
});
var scale = d3.scalePoint()
.domain(data)
.range([20, 480]);
var axis = d3.axisBottom(scale);
var gX = svg.append("g")
.attr("transform", "translate(0,50)")
.call(axis);Run Code Online (Sandbox Code Playgroud)
path, line {
shape-rendering: crispEdges;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg width="500" height="100"></svg>Run Code Online (Sandbox Code Playgroud)
您可以使用tickFormat仅显示每 4 个刻度中的一个:
var svg = d3.select("svg");
var data = d3.range(30).map(function(d) {
return "tick" + d
});
var scale = d3.scalePoint()
.domain(data)
.range([20, 480]);
var axis = d3.axisBottom(scale)
.tickFormat(function(d, i) {
return i % 3 === 0 ? d : null;
});
var gX = svg.append("g")
.attr("transform", "translate(0,50)")
.call(axis);Run Code Online (Sandbox Code Playgroud)
path, line {
shape-rendering: crispEdges;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg width="500" height="100"></svg>Run Code Online (Sandbox Code Playgroud)
但是,此解决方案仅删除文本,留下勾号。如果您还想删除勾号,您可以创建一个新选择并使用each:
var svg = d3.select("svg");
var data = d3.range(30).map(function(d) {
return "tick" + d
});
var scale = d3.scalePoint()
.domain(data)
.range([20, 480]);
var axis = d3.axisBottom(scale);
var gX = svg.append("g")
.attr("transform", "translate(0,50)")
.call(axis);
d3.selectAll(".tick").each(function(d, i) {
if (i % 3 != 0) {
d3.select(this).remove()
}
})Run Code Online (Sandbox Code Playgroud)
path,
line {
shape-rendering: crispEdges;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg width="500" height="100"></svg>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2795 次 |
| 最近记录: |