D3 позволяет нам легко добавлять графику в интерфейсное веб-приложение.

Vue - популярный интерфейсный веб-фреймворк.

Они отлично работают вместе. В этой статье мы рассмотрим, как добавить графику в приложение Vue с помощью D3.

Линейный график

Мы можем добавить линейный график в наше приложение React с D3.

Для этого пишем:

public/data.csv

year,population
2006,20
2008,25
2010,38
2012,41
2014,53
2016,26
2017,42

App.js

import React, { useEffect } from "react";
import * as d3 from "d3";
const createLineChart = async () => {
  const margin = { top: 20, right: 20, bottom: 30, left: 50 },
    width = 960 - margin.left - margin.right,
    height = 500 - margin.top - margin.bottom;
  const x = d3.scaleTime().range([0, width]);
  const y = d3.scaleLinear().range([height, 0]);
  const valueline = d3
    .line()
    .x(function (d) {
      return x(d.year);
    })
    .y(function (d) {
      return y(d.population);
    });
  const svg = d3
    .select("body")
    .append("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
    .append("g")
    .attr("transform", `translate(${margin.left}, ${margin.top})`);
  const data = await d3.csv("/data.csv");
  data.forEach(function (d) {
    d.population = +d.population;
  });
  x.domain(
    d3.extent(data, function (d) {
      return d.year;
    })
  );
  y.domain([
    0,
    d3.max(data, function (d) {
      return d.population;
    })
  ]);
  svg.append("path").data([data]).attr("class", "line").attr("d", valueline);
  svg
    .append("g")
    .attr("transform", `translate(0, ${height})`)
    .call(d3.axisBottom(x));
svg.append("g").call(d3.axisLeft(y));
};
export default function App() {
  useEffect(() => {
    createLineChart();
  }, []);
  return (
    <div className="App">
      <style>{`
        .line {
          fill: none;
          stroke: green;
          stroke-width: 5px;
        }
      `}</style>
    </div>
  );
}

Мы создаем функцию createLineChart для создания линейного графика.

Сначала мы пишем:

const margin = {
    top: 20,
    right: 20,
    bottom: 30,
    left: 50
  },
  width = 960 - margin.left - margin.right,
  height = 500 - margin.top - margin.bottom;

, чтобы установить поля, ширину и высоту диаграммы.

Затем мы добавляем объекты x и y, чтобы мы могли добавить минимальное и максимальное значения для строк:

const x = d3.scaleTime().range([0, width]);
const y = d3.scaleLinear().range([height, 0])

Затем мы устанавливаем данные для осей x и y:

const valueline = d3
  .line()
  .x(function(d) {
    return x(d.year);
  })
  .y(function(d) {
    return y(d.population);
  });

Затем мы добавляем элемент svg в наш компонент с помощью:

const svg = d3
  .select("body")
  .append("svg")
  .attr("width", width + margin.left + margin.right)
  .attr("height", height + margin.top + margin.bottom)
  .append("g")
  .attr("transform", `translate(${margin.left}, ${margin.top})`);

Затем мы читаем данные из CSV с помощью:

const data = await d3.csv("/data.csv");

Затем мы добавляем домены x и y с:

data.forEach(function(d) {
  d.population = +d.population;
});
x.domain(
  d3.extent(data, function(d) {
    return d.year;
  })
);
y.domain([
  0,
  d3.max(data, function(d) {
    return d.population;
  })
]);

чтобы вернуть метки для осей x и y.

Чтобы добавить строку, мы пишем:

svg.append("path").data([data]).attr("class", "line").attr("d", valueline);

Добавляем ось x с помощью:

svg
  .append("g")
  .attr("transform", `translate(0, ${height})`)
  .call(d3.axisBottom(x));

И добавляем ось Y с помощью:

svg.append("g").call(d3.axisLeft(y));

Заключение

Мы можем добавить линейный график с D3 в наше приложение React.