使用D3 v.3,我想在x轴上消除除了两个刻度标签外的所有标签,并将第一个直接放在y轴下,第二个放在辅助y轴下,如屏幕截图所示。我知道.ticks(count)
函数不一定会给你你要求的滴答数。我怎么能得到两个刻度并按照我的描述放置?
以下是我如何生成x轴:
// Set the ranges
var xScale = d3.time.scale().range([0, width]);
// Define the axes
var xAxis = d3.svg.axis().scale(xScale)
.orient("bottom")
.ticks(2)
.tickFormat(formatTime);
(我不限于第3版,但我不确定通过切换到第4版可能会对现有代码产生什么影响。)
答案 0 :(得分:1)
使用ticks
不是最好的方法,因为:
<强>解决方案强>:
如果您将xScale
域传递给tickValues
函数,则您只有轴中的第一个和最后一个日期:
.tickValues(xScale.domain())
这是一个演示:
var svg = d3.select("svg");
var xScale = d3.time.scale().range([30, 470])
.domain([new Date(2016, 00, 01), new Date(2017, 11, 01)]);
var xAxis = d3.svg.axis().scale(xScale)
.orient("bottom")
.tickValues(xScale.domain())
.tickFormat(function(d) {
return d3.time.format("%b %Y")(d);
});
svg.append("g")
.attr("transform", "translate(0,50)")
.call(xAxis)
path,
line {
fill: none;
stroke: black;
shape-rendering: crispEdges;
}
<script src="https://d3js.org/d3.v3.min.js"></script>
<svg width="500" height="100"></svg>