Реализуйте простую столбчатую диаграмму, используя D3.js+Vue.

внешний интерфейс SVG Vue.js d3.js

Недавно я хотел попробовать использовать d3.js в проекте Vue для инкапсуляции некоторых часто используемых диаграмм. Здесь запишите процесс создания собственного проекта и создайте простую столбчатую диаграмму. Если вы не знаете D3, пожалуйста, переместитеD3 Data-Driven Documents, которая представляет собой библиотеку функций JavaScript, основанную на способе работы с документами, управляемыми данными. Она в основном используется для рисования веб-страниц и создания интерактивной графики. Это одна из самых популярных библиотек визуализации.

иллюстрировать

  • Быстро создавайте проекты с помощью шаблонов Vue-cli
  • нпм установить D3
  • Реализуйте простую столбчатую диаграмму

Строительство проекта

Используйте vue-cli для создания одностраничного приложения:

# 安装 vue-cli
$ npm install --global vue-cli
# 使用 "webpack" 模板创建一个新项目
$ vue init webpack d3-vue
# 安装依赖,然后开始!
$ cd d3-vue
$ npm run dev

Установка D3 (последняя версия v5):

$ npm install d3 --save

D3 представляет:

$ import * as d3 from 'd3'

Реализовать простую диаграмму

1. Получите элемент dom в Vue

В vue вы можете манипулировать элементом dom, добавляя атрибут ref к тегу, а затем используя this.$refs для ссылки на него в js.

<template>
    <div>
        <h3>一个简单的图表</h3>
        <svg ref="baseBarChart" class="base-bar-chart"></svg>
    </div>
</template>

// 省略的代码...
var chartSvg = d3.select(this.$refs.baseBarChart)
2. Установите данные диаграммы

Основные компоненты диаграммы прямоугольника являются прямоугольниками, осями и текстовыми описаниями. Данные, которые нам нужны, являются данными графика, ширина графика и ширина прямоугольника.

// 设置图表数据,图表宽度和矩形宽度
  var chartData = this.chartData
  var width = this.width
  var barHeight = this.barHeight
3. Добавьте холст

Чтобы рисовать, первое, что вам нужно, это холст для рисования. D3 предоставляет множество генераторов для графики SVG, здесь мы используем холст SVG. Выберите элемент svg в документе, здесь используется атрибут $refs

// 画布
  var chartSvg = d3.select(this.$refs.baseBarChart)
    .attr('width', width)
    .attr('height', barHeight * chartData.length)
4. шкала по оси x

d3.scaleLinear(), линейная шкала, отображает один непрерывный интервал в другой. При рисовании, если ширина прямоугольника задана непосредственно по заданным данным, возникают большие ограничения. Например, в наборе данных есть значение 2000. Мы не можем использовать 2000 пикселей для представления ширины прямоугольника, потому что холст не такой длинный. В это время нам нужно сопоставить значение одной области с другой областью, и соотношение размеров остается неизменным в процессе преобразования.

// x轴比例尺
  var xScale = d3.scaleLinear()
    .domain([0, d3.max(chartData)])
    .range([0, width])
5. Контейнеры для прямоугольников и текст метки для добавления элементов

Когда есть данные, не хватает графического элемента, его можно добавить в метод нижней цепочки, чтобы добавить достаточно элементов:selection.selectAll(element).data(data).enter().append(element)

// 矩形和label文字组合的容
var g = chartSvg.selectAll('g')
    .data(chartData)
    .enter().append('g')
    .attr('transform', function (d, i) { return 'translate(0,' + i * barHeight + ')' })
6. Добавить прямоугольник и текст этикетки
// 添加矩形
  g.append('rect')
    .attr('width', xScale)
    .attr('height', barHeight - 2)
    .attr('fill', 'green')
  // 添加label文字
  g.append('text')
    .attr('x', function (d) { return xScale(d) + 3 })
    .attr('y', barHeight - 10)
    .attr('dy', '0.3em')
    .attr('fill', 'red')
    .style('font-size', '12px')
    .text(function (d) { return d })

Нарисованный график выглядит следующим образом:

一个简单的柱形图

использовать этот компонент

Как использовать компонент столбчатой ​​диаграммы, который мы определили, в 3 шага:

1. импорт импорт
2. Установка данных
3. Передать значение свойства дочернему компоненту
<base-bar-chart :chart-data="barChart.data" :width="barChart.width" :bar-height="barChart.barHeight"></base-bar-chart>

import BaseBarChart from '../components/base-bar-chart'

export default {
    name: 'BaseBarChartView',
    components: {
        BaseBarChart
    },
    data () {
        return {
            barChart: {
                data: [4, 6, 12, 10, 8, 1, 9],
                width: 540,
                barHeight: 20
            }
        }
    }
}

Конфигурация маршрутизации и запросы данных

Оставшаяся часть — это конфигурация маршрутизации vue-router для каждой страницы и запрос данных axios для домашней страницы.

项目图
адрес проекта:d3-vue