d3折线图 - 如何从Y轴右侧开始直线?

问题描述 投票:0回答:1

我有一个日线代表X轴的折线图。而不是我的线从Y轴开始,我想稍微向右移动它,以便它更具可读性。如果可能的话,我还想在我的X轴刻度列表中添加一个日期。所以基本上,如果我有一个包含5个日期的数组,例如:

{'2018年3月19日','2018年4月24日','2018年5月19日','2018年6月4日','2018年7月6日'}

我希望2018年3月19日不会直接显示在X轴上= 0.但是,我仍然希望在X轴上有一个刻度值= 0,例如我的数组中的第一个日期减去一个月。这有意义吗?这是否可以用d3轻松完成?

const circleLabelDrawDuration = 700;
const minDate = data[0].pullDate.setMonth(data[0].pullDate.getMonth() - 4);
const maxDate = data[data.length - 1].pullDate;

const xAxis = d3.scaleTime().domain([minDate, maxDate]).range([0, width]);

svg.append('g').call(d3.axisBottom(xAxis).ticks(pullDates.length).tickValues(pullDates).tickFormat(d3.timeFormat("%b %Y")))
.attr('transform', `translate(0,${height})`).selectAll('text')
.style('text-anchor', 'end').attr('dx', '-.8em').attr('dy', '-.15em').attr('transform', 'rotate(-50)');
javascript d3.js linechart
1个回答
0
投票

在设置x域时,我会执行以下操作。我发现偏移非常有用。使用一些d3函数使其更容易。

const monthInMs = 2.628e+9 // this is 1 month in ms
const xMin = +d3.min(dataArray, (d) => d.timestamp) - monthInMs;
const xMax = +d3.max(dataArray, (d) => d.timestamp) + monthInMs;
xScale.domain([xMin, xMax]);

我在d3.min前面添加了+,以确保返回的值是数字而不是日期对象。我给了最小值和最大值,这样你可以在两边都有一些填充,但你只需要使用你想要的那些。

© www.soinside.com 2019 - 2024. All rights reserved.