【发布时间】:2020-07-29 02:26:51
【问题描述】:
希望使用 D3 SVG 对条形图进行样式化。现在它在 y 轴上包含一个数字,在 x 轴上包含每日标签。每天都有一个刻度线,我只想显示一周的第一个日期。我怎样才能每周只显示一个?代码如下:
d3.csv("us-counties-cases.csv", function(data) {
filteredData = data.filter(function(row) {
return row['county'] == 'New York City';
});
var x = d3.scaleBand()
.range([ 0, width])
.domain(filteredData.map(function(d) {
return d.date;
}))
.padding(0.2);
svg.append("g")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x))
.selectAll("text")
.attr("transform", "translate(-10,0)rotate(-45)")
.style("text-anchor", "end");
// Add Y axis
var max = d3.max(filteredData, function(d) { return d.cases; });
var y = d3.scaleLinear()
.domain([0, max * 1.2])
.range([ height, 0]);
svg.append("g")
.call(d3.axisLeft(y));
// Bars
svg.selectAll("mybar")
.data(filteredData)
.enter()
.append("rect")
.attr("x", function(d) {
return x(d.date);
})
.attr("width", x.bandwidth())
.attr("fill", "#b3b3b3")
.attr("height", function(d) {
return height - y(0);
})
.attr("y", function(d) {
return y(0);
})
// Animation
svg.selectAll("rect")
.transition()
.duration(200)
.attr("y", function(d) {
return y(d.cases);
})
.attr("height", function(d) {
return height - y(d.cases);
})
.delay(function(d,i){
return(i*50)
})
})
【问题讨论】:
-
这能回答你的问题吗? D3 Axis ticks by Week of Year
-
不,如果您使用的比例没有实现 scale.ticks,axis.tick() 方法将不起作用,就像在使用 scaleBand 的 OP 问题中一样。否则这将是正确的方法。
标签: javascript d3.js svg