Статьи

Создание красивых графиков с использованием обёрток Vue.js для Chart.js

Графики являются важной частью современных веб-сайтов и приложений. Они помогают представить информацию, которая не может быть легко представлена ​​в тексте. Диаграммы также помогают разобраться в данных, которые обычно не имеют смысла в текстовом формате, представляя их в виде, который легко читать и понимать.

В этой статье я покажу вам, как представлять данные в виде диаграмм различных типов с помощью Chart.js и Vue.js. Chart.js — это простая, но гибкая библиотека диаграмм JavaScript для разработчиков и дизайнеров, которая позволяет рисовать различные виды диаграмм с помощью элемента canvas HTML5. Хороший курс по Chart.js можно прочитать здесь .

Vue.js — это прогрессивный JavaScript-фреймворк, который мы будем использовать вместе с Chart.js для демонстрации примеров диаграмм. Если вы новичок в Vue.js, есть замечательный учебник по использованию Vue.js в SitePoint. Мы также будем использовать Vue CLI для создания проекта Vue.js для демонстрации, которую мы собираемся построить.

Горничная позиционирует объекты, представляющие разные типы диаграмм

Графики, Графики, Графики

В репозитории awesome-vue на GitHub есть потрясающая коллекция оболочек Vue для различных библиотек графиков. Однако, поскольку мы концентрируемся на Chart.js, мы рассмотрим следующие оболочки для этой библиотеки:

Мы будем использовать эти обертки, чтобы продемонстрировать, как создавать различные типы диаграмм, а также коснемся уникальных функций, которые предлагает каждая из них.

Обратите внимание, что исходный код этого руководства доступен на GitHub .

Строительство проекта с помощью Vue CLI

Давайте начнем с установки Vue CLI с помощью следующей команды:

 npm install -g @vue/cli 

Как только это будет сделано, мы можем приступить к созданию леса проекта, набрав:

 vue create chart-js-demo 

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

 ? Please pick a preset: Manually select features ? Check the features needed for your project: Babel, Router, Linter ? Use history mode for router? Yes ? Pick a linter / formatter config: ESLint with error prevention only ? Pick additional lint features: Lint on save ? Where do you prefer placing config for Babel etc.? In dedicated config files ? Save this as a preset for future projects? No 

Теперь давайте установим Chart.js, а также различные обертки, которые нам нужны для нашего приложения:

 cd chart-js-demo npm install chart.js chartkick hchs-vue-charts vue-chartjs vue-chartkick 

Подсказка: если вы используете npm 5, флаг --save больше не нужен, поскольку все пакеты теперь автоматически сохраняются. Подробнее об этом читайте здесь .

Давайте проверим, что у нас есть, и запустим наше приложение:

 npm run serve 

Если все прошло хорошо, вы сможете открыть localhost: 8080 и увидеть стандартную страницу приветствия.

Основные настройки

Далее нам нужно добавить представление для каждой оболочки. Создайте следующие файлы в src/views :

  • VueChartJS.vue
  • VueChartKick.vue
  • VueCharts.vue
 touch src/views/{VueChartJS.vue,VueChartKick.vue,VueCharts.vue} 

Затем создайте следующие файлы в src/components :

  • LineChart.vue
  • BarChart.vue
  • BubbleChart.vue
  • Reactive.vue
 touch src/components/{LineChart.vue,BarChart.vue,BubbleChart.vue,Reactive.vue} 

Они соответствуют типам графиков, которые мы будем использовать.

Наконец, вы можете удалить файл About.vue в src/views , файл HelloWorld.vue в src/components , а также папку assets в src . Мы не будем нуждаться в них.

Содержимое вашего каталога src должно выглядеть так:

 . ├── App.vue ├── components │ ├── BarChart.vue │ ├── BubbleChart.vue │ ├── LineChart.vue │ └── Reactive.vue ├── main.js ├── router.js └── views ├── Home.vue ├── VueChartJS.vue ├── VueChartKick.vue └── VueCharts.vue 

Добавление маршрутов

Следующее, что мы хотим сделать, — это создать различные маршруты, по которым мы можем просматривать графики для каждой из созданных выше оболочек. Нам /chartjs маршрут /charts для отображения диаграмм, созданных с помощью оболочки vue-charts , /chartjs для отображения диаграмм, созданных с vue-chartjs оболочки vue-chartjs , и, наконец, /chartkick для отображения диаграмм, созданных с vue-chartkick оболочки vue-chartkick . Мы также оставим / route на месте для отображения Home view.

Перейдите в папку src приложения и откройте файл router.js . Замените содержимое этого файла следующим:

 import Vue from 'vue' import Router from 'vue-router' import Home from '@/views/Home' import VueChartJS from '@/views/VueChartJS' import VueChartKick from '@/views/VueChartKick' import VueCharts from '@/views/VueCharts' Vue.use(Router) export default new Router({ routes: [ { path: '/', name: 'Home', component: Home }, { path: '/chartjs', name: 'VueChartJS', component: VueChartJS }, { path: '/chartkick', name: 'VueChartKick', component: VueChartKick }, { path: '/charts', name: 'VueCharts', component: VueCharts } ] }) 

Здесь мы импортировали компоненты Vue, которые мы создали выше. Компоненты являются одной из самых мощных функций Vue. Они помогают нам расширить базовые элементы HTML для инкапсуляции многократно используемого кода. На высоком уровне компоненты являются пользовательскими элементами, к которым компилятор Vue присоединяет поведение.

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

Добавление навигации

Мы можем определить нашу навигацию для использования между компонентами в src/App.vue . Мы также добавим некоторые основные стили:

 <template> <div id="app"> <div id="nav"> <ul> <li><router-link to="/">Home</router-link></li> <li><router-link to="/chartjs">vue-chartjs</router-link></li> <li><router-link to="/charts">vue-charts</router-link></li> <li><router-link to="/chartkick">vue-chartkick</router-link></li> </ul> </div> <router-view /> </div> </template> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; } #nav { padding: 30px; height: 90px; } #nav a { font-weight: bold; color: #2c3e50; text-decoration: underline; } #nav a.router-link-exact-active { color: #42b983; text-decoration: none; } #nav ul { list-style-type: none; padding: 0; } #nav ul li { display: inline-block; margin: 0 10px; } h1 { font-size: 1.75em; } h2 { line-height: 2.5em; font-size: 1.25em; } </style> 

Здесь нет ничего революционного. Обратите внимание на использование компонента <router-view /> , где мы будем отображать наши представления.

Домашний компонент

Как упоминалось выше, Home компонент служит маршрутом по умолчанию ( / ). Откройте его и замените содержимое блоком кода ниже:

 <template> <section class="hero"> <div class="hero-body"> <div class="container"> <h1>Creating Beautiful Charts Using Vue.js Wrappers For Chart.js</h1> <h2> Read the article on SitePoint: <a href="https://www.sitepoint.com/creating-beautiful-charts-vue-chart-js/">  </a>
         </ H2>
         <H3>
           Загрузите репо с GitHub:
           <a href="https://github.com/sitepoint-editors/vue-charts">
             https://github.com/sitepoint-editors/vue-charts
           </a>
         </ H3>
       </ DIV>
     </ DIV>
   </ Раздел>
 </ Шаблон>

 <Скрипт>
 экспорт по умолчанию {
   имя: "дом"
 }
 </ Скрипт>

Добавление булмы

Еще одна вещь, прежде чем мы начнем добавлять диаграммы. Давайте добавим в приложение фреймворк Bulma CSS . Это должно сделать вещи проще, когда дело доходит до CSS.

Откройте файл public/index.html и добавьте следующее в тег head :

 <link href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css" rel="stylesheet"> 

Теперь, если вы посетите localhost: 8080 , вы сможете перемещаться по оболочке приложения.

Наконец мы можем перейти к созданию диаграмм!

Создание диаграмм с помощью vue-chartjs

vue-chartjs — это оболочка Chart.js, которая позволяет нам легко создавать повторно используемые компоненты диаграммы. Возможность повторного использования означает, что мы можем импортировать базовый класс диаграммы и расширить его для создания пользовательских компонентов.

При этом мы продемонстрируем четыре типа диаграмм, которые можно построить с помощью vue-chartjs : линейная диаграмма, гистограмма, пузырьковая диаграмма и гистограмма, которая демонстрирует реактивность (диаграмма обновляется всякий раз, когда происходит изменение в наборе данных).

Линия Диаграмма

Чтобы создать линейную диаграмму, мы создадим компонент для отображения только этого типа диаграммы. Откройте LineChart.vue компонента LineChart.vue папке src/components и добавьте следующий код:

 <script> //Importing Line class from the vue-chartjs wrapper import { Line } from 'vue-chartjs' //Exporting this so it can be used in other components export default { extends: Line, data () { return { datacollection: { //Data to be represented on x-axis labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], datasets: [ { label: 'Data One', backgroundColor: '#f87979', pointBackgroundColor: 'white', borderWidth: 1, pointBorderColor: '#249EBF', //Data to be represented on y-axis data: [40, 20, 30, 50, 90, 10, 20, 40, 50, 70, 90, 100] } ] }, //Chart.js options that controls the appearance of the chart options: { scales: { yAxes: [{ ticks: { beginAtZero: true }, gridLines: { display: true } }], xAxes: [ { gridLines: { display: false } }] }, legend: { display: true }, responsive: true, maintainAspectRatio: false } } }, mounted () { //renderChart function renders the chart with the datacollection and options object. this.renderChart(this.datacollection, this.options) } } </script> 

Давайте обсудим, что делает код выше. Первым делом мы импортировали нужный класс диаграммы (в данном случае Line ) из vue-chartjs и экспортировали его.

Свойство data содержит объект datacollection который содержит всю информацию, необходимую для построения линейного графика. Это включает в себя конфигурацию Chart.js, например labels , которые будут представлены на оси x, datasets , которые будут представлены на оси y, и объект options , который управляет внешним видом диаграммы.

mounted функция вызывает renderChart() который отображает диаграмму с datacollection и options переданными в качестве параметров.

Теперь давайте views/VueChartJS.vue файл views/VueChartJS.vue и добавим следующий код:

 <template> <section class="container"> <h1>Demo examples of vue-chartjs</h1> <div class="columns"> <div class="column"> <h3>Line Chart</h3> <line-chart></line-chart> </div> <div class="column"> <h3>Bar Chart</h3> <!--Bar Chart example--> </div> </div> <div class="columns"> <div class="column"> <h3>Bubble Chart</h3> <!--Bubble Chart example--> </div> <div class="column"> <h3>Reactivity - Live update upon change in datasets</h3> <!--Reactivity Line Chart example--> </div> </div> </section> </template> <script> import LineChart from '@/components/LineChart' import BarChart from '@/components/BarChart' import BubbleChart from '@/components/BubbleChart' import Reactive from '@/components/Reactive' export default { name: 'VueChartJS', components: { LineChart, BarChart, BubbleChart, Reactive } } </script> 

Файл VueChartJS.vue содержит раздел template котором содержится код HTML, раздел script котором содержится код JavaScript, и раздел style котором содержится код CSS.

Внутри раздела template мы использовали класс columns от Bulma, чтобы создать макет с двумя столбцами и двумя строками. Мы также добавили компонент line-chart который будет создан в разделе script .

Внутри раздела script мы импортировали созданные ранее файлы .vue и ссылались на них в объекте components . Это означает, что мы можем использовать их в HTML-коде следующим образом: line-chart , bar-chart , bubble-chart и reactive .

Теперь, если вы /chartjs к /chartjs , линейный график должен отобразиться на этой странице.

Гистограмма

Для следующего графика мы создадим пользовательский компонент, который помогает отображать только гистограммы. Откройте BarChart.vue компонента BarChart.vue папке src/components и добавьте следующий код:

 <script> //Importing Bar class from the vue-chartjs wrapper import { Bar } from 'vue-chartjs' //Exporting this so it can be used in other components export default { extends: Bar, data () { return { datacollection: { //Data to be represented on x-axis labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], datasets: [ { label: 'Data One', backgroundColor: '#f87979', pointBackgroundColor: 'white', borderWidth: 1, pointBorderColor: '#249EBF', //Data to be represented on y-axis data: [40, 20, 30, 50, 90, 10, 20, 40, 50, 70, 90, 100] } ] }, //Chart.js options that controls the appearance of the chart options: { scales: { yAxes: [{ ticks: { beginAtZero: true }, gridLines: { display: true } }], xAxes: [ { gridLines: { display: false } }] }, legend: { display: true }, responsive: true, maintainAspectRatio: false } } }, mounted () { //renderChart function renders the chart with the datacollection and options object. this.renderChart(this.datacollection, this.options) } } </script> 

Приведенный выше код работает аналогично LineChart.vue файле LineChart.vue . Единственная разница здесь в том, что класс Bar импортируется и расширяется вместо Line .

Еще одна вещь: прежде чем мы сможем увидеть нашу гистограмму, нам нужно отредактировать файл VueChartJS.vue и заменить <!--Bar Chart example--> на <bar-chart></bar-chart> . Мы просто используем компонент Bar, который мы создали внутри в нашем HTML-шаблоне.

Пузырьковая диаграмма

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

Примечание. В пузырьковых диаграммах используются пузырьки / круги для отображения данных в трехмерном методе (x, y, r). x используется для отображения данных по горизонтальной оси, y — для отображения данных по вертикали, а r — для отображения размера отдельных пузырьков.

Откройте BubbleChart.vue компонента BubbleChart.vue папке src / components и добавьте следующий код:

 <script> //Importing Bubble class from the vue-chartjs wrapper import { Bubble } from 'vue-chartjs' //Exporting this so it can be used in other components export default { extends: Bubble, data () { return { datacollection: { //Data to be represented on x-axis labels: ['Data'], datasets: [ { label: 'Data One', backgroundColor: '#f87979', pointBackgroundColor: 'white', borderWidth: 1, pointBorderColor: '#249EBF', //Data to be represented on y-axis data: [ { x: 100, y: 0, r: 10 }, { x: 60, y: 30, r: 20 }, { x: 40, y: 60, r: 25 }, { x: 80, y: 80, r: 50 }, { x: 20, y: 30, r: 25 }, { x: 0, y: 100, r: 5 } ] } ] }, //Chart.js options that controls the appearance of the chart options: { scales: { yAxes: [{ ticks: { beginAtZero: true }, gridLines: { display: true } }], xAxes: [ { gridLines: { display: false } }] }, legend: { display: true }, responsive: true, maintainAspectRatio: false } } }, mounted () { //renderChart function renders the chart with the datacollection and options object. this.renderChart(this.datacollection, this.options) } } </script> 

Приведенный выше код работает аналогично коду в LineChart.vue и BarChart.vue . Разница здесь в том, что класс Bubble импортируется и расширяется вместо Line или Bar а объект datasets принимает разные значения для x , y и z .

Нам нужно сделать еще одну вещь, прежде чем мы сможем увидеть нашу пузырьковую диаграмму — то же самое, что мы сделали для других диаграмм: отредактируйте файл VueChartJS.vue и замените <!--Bubble Chart example--> на <bubble-chart></bubble-chart> .

Гистограмма, демонстрирующая реактивность

Последний пример, который мы продемонстрируем с помощью vue-chartjs — это то, как его можно использовать для создания диаграммы, которая автоматически обновляется при каждом изменении в наборе данных. Важно отметить, что Chart.js обычно не предлагает эту функцию, а vue-chartjs — с помощью любого из этих двух миксов:

  • reactiveProp
  • reactiveData

Откройте файл компонента Reactive.vue папке src / components и введите следующий код:

 <script> //Importing Bar and mixins class from the vue-chartjs wrapper import { Bar, mixins } from 'vue-chartjs' //Getting the reactiveProp mixin from the mixins module. const { reactiveProp } = mixins export default Bar.extend({ mixins: [ reactiveProp ], data () { return { //Chart.js options that control the appearance of the chart options: { scales: { yAxes: [{ ticks: { beginAtZero: true }, gridLines: { display: true } }], xAxes: [ { gridLines: { display: false } }] }, legend: { display: true }, responsive: true, maintainAspectRatio: false } } }, mounted () { // this.chartData is created in the mixin and contains all the data needed to build the chart. this.renderChart(this.chartData, this.options) } }) </script> 

Первое, что мы сделали в приведенном выше коде, это импортировали Bar и mixins классифицированные из оболочки vue-chartjs и расширили Bar . Мы также извлекли reactiveProp миксин из модуля mixins чтобы использовать его для реактивности.

Миксин reactiveProp расширяет логику компонента диаграммы, автоматически создает реквизит с именем chartData и добавляет наблюдатель Vue к этой реквизите. На этот раз мы не создавали объект dataset , так как все необходимые данные будут находиться внутри chartData .

Чтобы это работало, нам нужно еще больше отредактировать наш VueChartJS.vue . Откройте VueChartJS.vue и после свойства components добавьте следующий код:

 data () { return { // instantiating datacollection with null datacollection: null } }, created () { //anytime the vue instance is created, call the fillData() function. this.fillData() }, methods: { fillData () { this.datacollection = { // Data for the y-axis of the chart labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], datasets: [ { label: 'Data One', backgroundColor: '#f87979', // Data for the x-axis of the chart data: [this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt()] } ] } }, getRandomInt () { // JS function to generate numbers to be used for the chart return Math.floor(Math.random() * (50 - 5 + 1)) + 5 } } 

Давайте пройдемся по коду выше. В объекте data мы возвращаем datacollection , для которой установлено значение null , а в created методе мы вызываем fillData() каждый раз, когда создается экземпляр компонента. Функция fillData будет создана в объекте methods .

В объекте methods мы создаем функцию с именем fillData . Эта функция создает объект datacollection , который содержит массив label (данные для оси x) и массив datasets , который содержит массив data необходимый для оси y.

Примечание: содержимое массива data является функцией getRandomInt , которая генерирует для нас случайное число.

Наконец, чтобы отобразить нашу диаграмму и посмотреть, работает ли реактивность, замените <!--Reactivity Line Chart example--> следующим:

 <reactive :chart-data="datacollection"></reactive> <button class="button is-primary" @click="fillData()">Randomize</button> 

Мы используем созданный нами reactive компонент и передаем содержимое datacollection chart-data реквизиты chart-data для отображения диаграммы. И у нас также есть кнопка, которая вызывает метод fillData() каждый раз, когда на него fillData() .

Перейдите к маршруту /chartjs в приложении, чтобы увидеть новую диаграмму, и нажмите кнопку « Рандомизировать» , чтобы диаграмма автоматически снова отображалась с новыми данными в режиме реального времени.

Создание диаграмм с помощью Vue-Charts

vue-charts совсем другой подход к построению диаграмм из vue-chartjs . Не требуется создавать отдельные компоненты для обработки данных и визуализации диаграммы. Все данные, необходимые для диаграммы, могут быть созданы в экземпляре Vue следующим образом:

 data () { return { labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], dataset: [65, 59, 80, 81, 56, 55, 40] } } 

И мы можем легко отобразить <chartjs-line></chartjs-line> диаграмму с помощью <chartjs-line></chartjs-line> в нашем шаблоне, линейчатую диаграмму с помощью <chartjs-bar></chartjs-bar> и радиолокационную диаграмму с помощью <chartjs-radar></chartjs-radar> .

Прежде чем мы продолжим, нам нужно зарегистрировать Vue-Charts по всему миру. Откройте main.js внутри папки src и добавьте следующие строки кода в существующие операторы import :

 import 'chart.js' import 'hchs-vue-charts' Vue.use(window.VueCharts) 

Здесь мы импортируем библиотеку Chart.js и hchs-vue-charts из папки node_modules и регистрируем ее глобально с помощью Vue.use(window.VueCharts) .

Теперь давайте начнем с vue-charts . Откройте файл VueCharts.vue который мы создали ранее, и введите следующий код:

 <template> <section class="container"> <h1>Demo examples of vue-charts</h1> <div class="columns"> <div class="column"> <h3>Line Chart</h3> <!--Line Chart Example--> </div> <div class="column"> <h3>Bar Chart</h3> <!--Bar Chart Example--> </div> </div> <div class="columns"> <div class="column"> <h3>Radar Chart</h3> <!--Radar Chart Example--> </div> <div class="column"> <h3>Data Binding Line Chart</h3> <!--Data Binding Line Chart Example--> </div> </div> </section> </template> <script> export default { name: 'VueCharts', data () { return { labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], dataset: [65, 59, 80, 81, 56, 55, 40] } } } </script> 

В приведенном выше блоке кода мы создали заполнители для диаграмм, и все, что нам нужно сделать, — это начать их вставлять.

Затем мы добавили метки и данные, которые будем использовать для различных диаграмм в объекте data в разделе script .

Давайте начнем создавать диаграммы сейчас.

Линия Диаграмма

Чтобы добавить <chartjs-line></chartjs-line> диаграмму, все, что нам нужно, это добавить <chartjs-line></chartjs-line> вместо комментария <!--Line Chart Example--> в разделе VueCharts.vue файла VueCharts.vue . Нам не нужно импортировать какой-либо компонент, потому что vue-charts был объявлен глобально в main.js

Гистограмма

Мы делаем то же самое для гистограмм. Добавьте <chartjs-bar></chartjs-bar> вместо комментария <!--Bar Chart Example--> в разделе VueCharts.vue файла VueCharts.vue .

Радар Диаграмма

Мы делаем то же самое для радиолокационных карт. Добавьте <chartjs-radar></chartjs-radar> вместо комментария <!--Radar Chart Example--> в разделе VueCharts.vue файла VueCharts.vue .

Как только это будет сделано, вы можете перейти к /charts и проверить графики, которые мы только что создали.

Пример привязки данных с линейной диаграммой

Привязка данных в vue-charts аналогична vue-chartjs , хотя vue-charts автоматически обновляет диаграмму при каждом изменении набора данных.

Чтобы проверить это, мы создадим функцию с именем addData и добавим ее к объекту methods компонента:

 methods: { addData () { this.dataset.push(this.dataentry) this.labels.push(this.datalabel) this.datalabel = '' this.dataentry = '' } } 

Метод addData текущее значение ввода формы данных и ввода метки (которое мы скоро добавим) в текущий набор данных. Теперь давайте добавим компонент, а также форму для добавления новых данных и метку.

Добавьте следующий фрагмент кода вместо комментария <!--Data Binding Line Chart Example--> :

 <form @submit.prevent="addData"> <input placeholder="Add a Data" v-model="dataentry"> <input placeholder="Add a Label" v-model="datalabel"> <button type="submit">Submit</button> </form> <chartjs-line :labels="labels" :data="dataset" :bind="true"></chartjs-line> 

Приведенный выше код представляет собой форму, которая позволяет вам ввести значения данных и метки, а затем отправить форму. Диаграмма будет отображаться автоматически с последней записью.

Создание диаграмм с помощью vue-chartkick

vue-chartkick — это оболочка Vue, которая позволяет вам создавать красивые графики в одну строку. Мы продемонстрируем использование этой библиотеки на четырех примерах. Мы будем создавать линейную диаграмму, линейчатую диаграмму, точечную диаграмму, а также будем использовать функцию загрузки (загружаемые диаграммы).

С точки зрения обработки данных, необходимых для набора данных диаграммы, vue-chartkick дает нам два варианта. Мы можем сделать что-то вроде <bar-chart :data="[['Work', 1322], ['Play', 1492]]"></bar-chart> , в котором данные добавляются в <line-chart :data="chartData"></line-chart> или <line-chart :data="chartData"></line-chart> , и мы объявляем массив chartData в объекте данных Vue следующим образом:

 data () { return { chartData: [['Jan', 44], ['Feb', 27], ['Mar', 60], ['Apr', 55], ['May', 37], ['Jun', 40], ['Jul', 69], ['Aug', 33], ['Sept', 76], ['Oct', 90], ['Nov', 34], ['Dec', 22]] } } 

Давайте начнем с использования vue-chartkick. Прежде чем мы продолжим, откройте файл main.js внутри папки src и добавьте следующий код:

 import Chartkick from 'chartkick' import VueChartkick from 'vue-chartkick' Vue.use(VueChartkick, { Chartkick }) 

Здесь мы импортируем библиотеку vue-chartkick оболочку vue-chartkick из node_modules и регистрируем ее глобально с помощью Vue.use(VueChartkick, { Chartkick }) .

Чтобы начать создавать диаграммы с помощью vue-chartkick, откройте файл VueChartKick.vue который мы создали ранее, и добавьте следующий код:

 <template> <section class="container"> <h1>Demo examples of vue-chartkick</h1> <div class="columns"> <div class="column"> <h3>Line Chart</h3> <!--Line Chart example--> </div> <div class="column"> <h3>Bar Chart</h3> <!--Bar Chart example--> </div> </div> <div class="columns"> <div class="column"> <h3>Scatter Chart</h3> <!--Scatter chart example--> </div> <div class="column"> <h3>Downloadable Line Chart</h3> <!--Downloadable line chart--> </div> </div> </section> </template> <script> export default { name: 'VueChartKick', data () { return { chartData: [['Jan', 44], ['Feb', 27], ['Mar', 60], ['Apr', 55], ['May', 37], ['Jun', 40], ['Jul', 69], ['Aug', 33], ['Sept', 76], ['Oct', 90], ['Nov', 34], ['Dec', 22]] } } } </script> 

В приведенном выше блоке кода мы снова создали заполнители для различных типов диаграмм, которые мы будем создавать, и все, что нам нужно сделать, — это начать их вставлять.

Затем мы создали массив chartData который содержит данные, которые мы будем использовать для различных диаграмм в объекте data в разделе script . Давайте начнем создавать диаграммы сейчас.

Линия Диаграмма

Создание линейного графика с помощью vue-chartkick очень просто и vue-chartkick . Все, что вам нужно сделать, это vue-chartkick компонент line-chart vue-chartkick а также определить, какой набор данных вы хотите использовать — что-то вроде этого: <line-chart :data="chartData"></line-chart> . В этом случае реквизит data устанавливается в массив chartData в объекте data Vue.

Поэтому замените комментарий <!--Line Chart example--> внутри файла VueChartKick.vue на <line-chart :data="chartData"></line-chart> и теперь линейный график должен хорошо отображаться.

Гистограмма

Мы можем создать гистограмму так же, как мы создали линейную диаграмму выше. Но в этом случае мы попробуем что-то другое. Вместо использования массива chartData в качестве набора данных, мы добавим набор данных в подпорки, например: <bar-chart :data="[['Work', 1322], ['Play', 1492]]"></bar-chart> .

Замените комментарий <!--Bar Chart example--> внутри файла VueChartKick.vue на <bar-chart :data="[['Work', 1322], ['Play', 1492]]"></bar-chart> , и ваша гистограмма должна отобразиться сейчас.

Точечная диаграмма

Точечные диаграммы также работают как линейные и гистограммы выше. Замените комментарий <!--Scatter Chart example--> VueChartKick.vue <!--Scatter Chart example--> внутри файла VueChartKick.vue на <scatter-chart :data="[[174.0, 80.0], [176.5, 82.3], [180.3, 73.6]]"></scatter-chart> и ваша точечная диаграмма должна отобразиться сейчас.

Загрузка диаграммы

vue-chartkick есть довольно vue-chartkick функция, которой нет в vue-chartjs и vue-charts : возможность создавать загружаемые диаграммы. После того, как диаграмма была загружена, пользователи могут легко сохранить диаграмму как изображение. Так как же это работает? Давайте проверим это с помощью линейного графика:

 <line-chart :data="chartData" :download="true"></line-chart> 

Мы установили для :download prop значение true, и это означает, что график можно загружать. Это все!

Замените комментарий <!--Downloadable line chart--> внутри файла VueChartKick.vue на <line-chart :data="chartData" :download="true"></line-chart> чтобы увидеть и протестировать функцию загрузки. в вашем приложении. Вы можете навести курсор на новый график, чтобы увидеть кнопку загрузки.

демонстрация

Сравнения

Итак, теперь, когда мы прошли через три оболочки Vue.js для Chart.js, каковы плюсы и минусы каждого из них?

Vue-chartjs

vue-chartjs , пожалуй, самая мощная из трех оболочек. Это дает так много места для гибкости, а также поставляется с функцией реактивности (возможность автоматического повторного рендеринга диаграммы, если в данных произошли изменения).

Конверт для оболочки может заключаться в том, что настройка диаграммы вначале может быть несколько сложной из-за различных доступных параметров, а также из-за того, что вам нужно создать внешний файл для хранения конфигурации для оболочки.

Vue-графики

vue-chartjs — довольно хорошая оболочка Chart.js. Это очень легко настроить, в отличие от vue-chartjs . Не требуется создавать отдельные компоненты для обработки данных и визуализации диаграмм. Все данные, необходимые для диаграммы, могут быть созданы в экземпляре Vue, как показано в примерах выше. Он также поставляется с функцией реактивности (возможность автоматической визуализации диаграммы, если в наборе данных произошли изменения) без необходимости в миксинах.

вя-chartkick

vue-chartkick также является довольно хорошей оболочкой Chart.js. Это может быть оболочка с самым простым способом использования из трех оболочек Chart.js.

Набор данных для диаграммы может быть добавлен двумя различными способами в vue-chartkick . Мы можем сделать что-то вроде <bar-chart :data="[['Work', 1322], ['Play', 1492]]"></bar-chart> , в котором данные добавляются в <line-chart :data="chartData"></line-chart> или <line-chart :data="chartData"></line-chart> , и мы объявляем массив chartData в объекте данных Vue, как показано выше в примерах. Он также поставляется с удивительной функцией, которая позволяет вам загружать ваши диаграммы в виде изображения — чего не хватает другим упаковщикам.

Единственный недостаток vue-chartkick том, что он не поддерживает реактивность из коробки.

Вывод

В этой статье я представил различные оболочки Vue для Chart.js, а также продемонстрировал примеры того, как использовать каждый из них для создания красивых диаграмм для вашего следующего веб-проекта.

Исходный код этого учебного руководства доступен на GitHub , и если вы хотите посмотреть демонстрационную версию учебного пособия, вы также можете увидеть это здесь .