Линейный график D3.js Ошибка: атрибут d: ожидаемое число, «MNaN,289,8LNaN,27 …»

#javascript #d3.js

#javascript #d3.js

Вопрос:

Линейный график не отображается, отображаются только оси. Отображаемая ошибка: d3.v4.min.js: 2 Ошибка: атрибут d: ожидаемое число, «MNaN, 289,8LNaN, 27 …». Время указано в коде Unix, возможно, это и вызывает ошибку. В файле отображается ось X со временем, а ось Y — с температурой. Я пытался преобразовать unix в временную метку, но мне это нужно в минутах / секундах.

Часть javascript :

  const xValue = d => new Date(d.timestamp * 1000);
    const xLabel = 'Time';
    const yValue = d => d.temprature;
    const yLabel = 'Temperature';
    const margin = { left: 120, right: 30, top: 20, bottom: 120 };

    const svg = d3.select('svg');
    const width = svg.attr('width');
    const height = svg.attr('height');
    const innerWidth = width - margin.left - margin.right;
    const innerHeight = height - margin.top - margin.bottom;

    const g = svg.append('g')
        .attr('transform', `translate(${margin.left},${margin.top})`);
    const xAxisG = g.append('g')
        .attr('transform', `translate(0, ${innerHeight})`);
    const yAxisG = g.append('g');

    xAxisG.append('text')
        .attr('class', 'axis-label')
        .attr('x', innerWidth / 2)
        .attr('y', 100)
        .text(xLabel);

    yAxisG.append('text')
        .attr('class', 'axis-label')
        .attr('x', -innerHeight / 2)
        .attr('y', -60)
        .attr('transform', `rotate(-90)`)
        .style('text-anchor', 'middle')
        .text(yLabel);

    const xScale = d3.scaleTime();
    const yScale = d3.scaleLinear();

    const xAxis = d3.axisBottom()
        .scale(xScale)
        .tickPadding(15)
        .ticks(5)
        .tickSize(-innerHeight);

    const yTicks = 5;
    const yAxis = d3.axisLeft()
        .scale(yScale)
        .ticks(yTicks)
        .tickPadding(15)
        .tickSize(-innerWidth);

    const line = d3.line()
        .x(d => xScale(xValue(d)))
        .y(d => yScale(yValue(d)))
        .curve(d3.curveBasis);

    const row = d => {
        d.timestamp = new Date(d.timestamp * 1000);
        d.temprature =  d.temprature;
        return d;
    };

    d3.csv('http://localhost:8000/result.csv', row, data => {
        xScale
            .domain(d3.extent(data, xValue))
            .range([0, innerWidth]);

        yScale
            .domain(d3.extent(data, yValue))
            .range([innerHeight, 0])
            .nice(yTicks);

        g.append('path')
            .attr('fill', 'none')
            .attr('stroke', 'steelblue')
            .attr('stroke-width', 4)
            .attr('d', line(data));

        xAxisG.call(xAxis);
        yAxisG.call(yAxis);
    });
  

Файл CSV :

 temprature,time
22.34,1553974814384
24.77,1554453925188
25.09,1554455725250
25.73,1554457525395
  

Комментарии:

1. В const xValue = d => new Date(d.timestamp * 1000); данных нет timestamp , вместо этого должно быть time . Голосование за закрытие из-за опечатки.

2. @GerardoFurtado Большое вам спасибо. Можете ли вы также помочь мне преобразовать его в минуты: секунды.