D3js отсутствует первая метка - PullRequest
0 голосов
/ 22 ноября 2018

Я не понимаю, почему отсутствует первая метка (2000).Я сравнил это со многими примерами, не находя причины.

axis

    let xAxisScale = d3
        .scaleTime()
        .domain([min, max]) // 2000, 2013
        .range([0, width]);

        xAxis = d3
        .axisBottom()
        .tickFormat(d3.timeFormat('%Y'))
        .tickPadding(5)
        .ticks(d3.timeYear)
        .scale(xAxisScale);

        gx = innerSpace
        .append('g')
        .attr('class', 'x axis')
        .attr('transform', 'translate(0,' + height + ')')
        .call(xAxis);

Вы видите какие-либо ошибки?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Рядом с вашим приятным ответом я пробовал разные способы получить дату и время без проблем с utc / gmt, но не нашел хорошего решения для работы с ним для всех веб-обозревателей без использования библиотеки.

Лучшее решениеЯ считаю, это использовать библиотеку моментами, потому что моментально будет обрабатывать часовой пояс:

const minMoment = moment(`01/01/${minDate}`, 'DD/MM/YYYY', true);
const maxMoment = moment(`01/01/${maxDate}`, 'DD/MM/YYYY', true);

this.xAxisScale = d3
    .scaleTime()
    .domain([minMoment.toDate(), maxMoment.toDate()])
    .range([0, width]);
0 голосов
/ 22 ноября 2018

Эта проблема может быть связана с небольшими изменениями даты min.Это зависит от того, как вы строите min дату.

Например, new Date('2000-01-01') не включает 2000 год, если ваш часовой пояс> 0.Вы можете написать new Date('2000-01-01T00:00:00Z'), чтобы использовать UTC.

Кроме того, если вы используете new Date(YYYY, MM, DD), вы должны учитывать, что месяц начинается с нуля, а день начинается с единицы.

Чтениео правильном способе решения этой проблемы здесь: http://bl.ocks.org/jebeck/9671241

...