Maison interface Web Questions et réponses frontales Comment configurer des barres de croissance dans Vue

Comment configurer des barres de croissance dans Vue

May 08, 2023 am 09:32 AM

Avant-propos

Dans la visualisation de données, le graphique à barres est un type de graphique très courant. Dans le framework Vue, comment implémenter un histogramme évolutif ? Cet article expliquera comment utiliser Vue et quelques autres bibliothèques pour implémenter un graphique à barres à croissance progressive.

Étape 1 : Installez les bibliothèques nécessaires

Lorsque nous utilisons Vue pour développer des applications, nous pouvons choisir d'utiliser certaines bibliothèques tierces pour nous aider dans le développement. Par exemple, dans cet article, la bibliothèque de visualisation de données que nous utilisons est D3.js, et la bibliothèque utilisée pour dessiner des graphiques est vx (implémentée sur la base de D3.js). Nous devons donc d'abord installer ces deux bibliothèques dans le projet.

1. Utilisez npm pour installer

Nous pouvons utiliser l'outil npm pour installer ces deux bibliothèques et exécuter les commandes suivantes dans l'ordre :

npm install d3
npm install vx
Copier après la connexion

2 Utilisez cdn pour introduire

Nous pouvons également utiliser le &lt. ;script> Code> présente les deux méthodes cdn suivantes à utiliser : <code><script></script>中引入以下两个cdn的方式来使用:

<script src="https://d3js.org/d3.v5.min.js"></script>
<script src="https://unpkg.com/@vx/group"></script>
Copier après la connexion

步骤二:数据准备

在绘制图表之前,我们需要先准备好数据。而在本次例子中,我们准备了一个简单的对象数组,每一个对象包含两个属性,具体如下:

const data = [
  { name: 'A', value: 50 },
  { name: 'B', value: 70 },
  { name: 'C', value: 90 },
  { name: 'D', value: 30 },
  { name: 'E', value: 80 }
]
Copier après la connexion

其中,name属性表示每一个条柱的名称,value属性表示每一个条柱的高度。

步骤三:绘制容器

在Vue中使用SVG图像绘制图表时,首先需要创建一个容器。本次例子中,我们将使用svg元素作为容器,并且设置必要的高度和宽度,代码如下:

<template>
  <div>
    <svg :height="height + margin.top + margin.bottom" :width="width + margin.left + margin.right">
      <g :transform="`translate(${margin.left}, ${margin.top})`">
        <!-- 绘制图表 -->
      </g>
    </svg>
  </div>
</template>

<script>
export default {
  data() {
    return {
      height: 200, // 容器高度
      width: 300, // 容器宽度
      margin: { top: 10, right: 10, bottom: 10, left: 10 } // 容器边距
    }
  }
}
</script>
Copier après la connexion

步骤四:绘制条柱

接下来,我们就可以通过数据绘制每一个条柱。本次例子中,我们需要绘制的是一个Comment configurer des barres de croissance dans Vue,所以每一次绘制都需要根据当前值来更新条柱的高度。

首先,我们按照以下代码来绘制初始的条柱:

const barWidth = 20 // 条柱宽度
const groupSpace = 10 // 条柱组间距
const maxBarHeight = height - margin.top - margin.bottom // 最大条柱高度
const xScale = d3.scaleBand()
  .domain(data.map(d => d.name))
  .range([0, width - margin.left - margin.right - (groupSpace + barWidth) * (data.length - 1)])
  .paddingInner(0.1)
const yScale = d3.scaleLinear()
  .domain([0, d3.max(data, d => d.value)])
  .range([maxBarHeight, 0])
const bars = d3.select(this.$el.querySelector('g'))
  .selectAll('.bar')
  .data(data)
  .enter()
  .append('rect')
  .attr('class', 'bar')
  .attr('x', d => xScale(d.name))
  .attr('y', d => yScale(d.value))
  .attr('height', d => maxBarHeight - yScale(d.value))
  .attr('width', barWidth)
  .attr('fill', 'blue')
Copier après la connexion

在上述代码中,我们通过D3.js来计算出每一个条柱的位置和高度,并使用rect元素绘制每一个条柱,初始高度为数据中的value属性。

接着,我们需要使用Vue的生命周期函数中的updated函数来实现条柱高度的逐步增长。具体实现如下:

<script>
export default {
  data() {
    return {
      // 同上
    }
  },
  mounted() {
    this.$nextTick(() => {
      this.createChart()
    })
  },
  updated() {
    const t = d3.transition().duration(1000)
    const maxBarHeight = this.height - this.margin.top - this.margin.bottom
    const yScale = d3.scaleLinear()
      .domain([0, d3.max(this.data, d => d.value)])
      .range([maxBarHeight, 0])
    const bars = d3.select(this.$el.querySelector('g'))
      .selectAll('.bar')
      .data(this.data)
    bars.transition(t)
      .attr('y', d => yScale(d.value))
      .attr('height', d => maxBarHeight - yScale(d.value))
  },
  methods: {
    createChart() {
      const barWidth = 20
      const groupSpace = 10
      const maxBarHeight = this.height - this.margin.top - this.margin.bottom
      const xScale = d3.scaleBand()
        .domain(this.data.map(d => d.name))
        .range([0, this.width - this.margin.left - this.margin.right - (groupSpace + barWidth) * (this.data.length - 1)])
        .paddingInner(0.1)
      const yScale = d3.scaleLinear()
        .domain([0, d3.max(this.data, d => d.value)])
        .range([maxBarHeight, 0])
      const bars = d3.select(this.$el.querySelector('g'))
        .selectAll('.bar')
        .data(this.data)
        .enter()
        .append('rect')
        .attr('class', 'bar')
        .attr('x', d => xScale(d.name))
        .attr('y', maxBarHeight)
        .attr('height', 0)
        .attr('width', barWidth)
        .attr('fill', 'blue')
      // 同上
    }
  }
}
</script>
Copier après la connexion

在上述代码中,我们使用updated

<template>
  <div>
    <svg :height="height + margin.top + margin.bottom" :width="width + margin.left + margin.right">
      <g :transform="`translate(${margin.left}, ${margin.top})`">
        <!-- 绘制图表 -->
      </g>
    </svg>
  </div>
</template>

<script>
import * as d3 from 'd3'

export default {
  data() {
    return {
      height: 200, // 容器高度
      width: 300, // 容器宽度
      margin: { top: 10, right: 10, bottom: 10, left: 10 }, // 容器边距
      data: [
        { name: 'A', value: 50 },
        { name: 'B', value: 70 },
        { name: 'C', value: 90 },
        { name: 'D', value: 30 },
        { name: 'E', value: 80 }
      ] // 数据
    }
  },
  mounted() {
    this.$nextTick(() => {
      this.createChart()
    })
  },
  updated() {
    const t = d3.transition().duration(1000)
    const maxBarHeight = this.height - this.margin.top - this.margin.bottom
    const yScale = d3.scaleLinear()
      .domain([0, d3.max(this.data, d => d.value)])
      .range([maxBarHeight, 0])
    const bars = d3.select(this.$el.querySelector('g'))
      .selectAll('.bar')
      .data(this.data)
    bars.transition(t)
      .attr('y', d => yScale(d.value))
      .attr('height', d => maxBarHeight - yScale(d.value))
  },
  methods: {
    createChart() {
      const barWidth = 20 // 条柱宽度
      const groupSpace = 10 // 条柱组间距
      const maxBarHeight = this.height - this.margin.top - this.margin.bottom // 最大条柱高度
      const xScale = d3.scaleBand()
        .domain(this.data.map(d => d.name))
        .range([0, this.width - this.margin.left - this.margin.right - (groupSpace + barWidth) * (this.data.length - 1)])
        .paddingInner(0.1)
      const yScale = d3.scaleLinear()
        .domain([0, d3.max(this.data, d => d.value)])
        .range([maxBarHeight, 0])
      const bars = d3.select(this.$el.querySelector('g'))
        .selectAll('.bar')
        .data(this.data)
        .enter()
        .append('rect')
        .attr('class', 'bar')
        .attr('x', d => xScale(d.name))
        .attr('y', maxBarHeight)
        .attr('height', 0)
        .attr('width', barWidth)
        .attr('fill', 'blue')
    }
  }
}
</script>
Copier après la connexion
Étape 2 : Préparation des données

Avant de dessiner le graphique, nous devons d'abord préparer les données. Dans cet exemple, nous avons préparé un tableau d'objets simple, chaque objet contient deux attributs, comme suit :

rrreee

Parmi eux, l'attribut name représente le nom de chaque barre, valeur L'attribut code> représente la hauteur de chaque barre.

Étape 3 : Dessinez le conteneur

Comment configurer des barres de croissance dans VueLorsque vous utilisez des images SVG pour dessiner des graphiques dans Vue, vous devez d'abord créer un conteneur. Dans cet exemple, nous utiliserons l'élément svg comme conteneur et définirons la hauteur et la largeur nécessaires. Le code est le suivant :

rrreee

Étape 4 : Dessiner des barres

Ensuite, nous pouvons passer le. données Dessinez chaque barre. Dans cet exemple, nous devons dessiner un graphique à barres qui s'agrandit progressivement, chaque dessin doit donc mettre à jour la hauteur de la barre en fonction de la valeur actuelle.

🎜Tout d'abord, nous dessinons les barres initiales selon le code suivant : 🎜rrreee🎜Dans le code ci-dessus, nous utilisons D3.js pour calculer la position et la hauteur de chaque barre, et utilisons rect L'élément dessine chaque barre avec la hauteur initiale définie sur l'attribut value dans les données. 🎜🎜Ensuite, nous devons utiliser la fonction mise à jour dans la fonction de cycle de vie de Vue pour augmenter progressivement la hauteur de la barre. L'implémentation spécifique est la suivante : 🎜rrreee🎜Dans le code ci-dessus, nous utilisons la fonction updated pour calculer le rapport de hauteur à chaque fois que les données sont mises à jour, et l'appliquons à chaque barre, obtenant ainsi une étape- effet de croissance par étapes. 🎜🎜Étape 5 : Affichage de l'effet🎜🎜Enfin, nous afficherons le graphique à barres dessiné. Le code spécifique est le suivant : 🎜rrreee🎜L'effet est illustré dans la figure ci-dessous : 🎜🎜🎜🎜🎜Résumé🎜🎜Dans cet article, nous avons présenté comment utiliser Vue et quelques autres bibliothèques pour implémenter un graphique à barres à croissance progressive. Bien que nous ayons utilisé des bibliothèques telles que D3.js et vx pendant le processus de mise en œuvre, l'utilisation de ces bibliothèques n'est pas très difficile. Leur maîtrise nous permet d'accomplir la tâche de visualisation des données plus facilement. J'espère que cet article vous a inspiré. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Qu'est-ce que l'utilisation Effecte? Comment l'utilisez-vous pour effectuer des effets secondaires? Qu'est-ce que l'utilisation Effecte? Comment l'utilisez-vous pour effectuer des effets secondaires? Mar 19, 2025 pm 03:58 PM

L'article traite de l'utilisation Effecte dans React, un crochet pour gérer les effets secondaires comme la récupération des données et la manipulation DOM dans les composants fonctionnels. Il explique l'utilisation, les effets secondaires courants et le nettoyage pour éviter des problèmes comme les fuites de mémoire.

Expliquez le concept de chargement paresseux. Expliquez le concept de chargement paresseux. Mar 13, 2025 pm 07:47 PM

Le chargement paresseux retarde le chargement du contenu jusqu'à ce qu'il soit nécessaire, améliorant les performances du Web et l'expérience utilisateur en réduisant les temps de chargement initiaux et la charge du serveur.

Quelles sont les fonctions d'ordre supérieur en JavaScript, et comment peuvent-ils être utilisés pour écrire du code plus concis et réutilisable? Quelles sont les fonctions d'ordre supérieur en JavaScript, et comment peuvent-ils être utilisés pour écrire du code plus concis et réutilisable? Mar 18, 2025 pm 01:44 PM

Les fonctions d'ordre supérieur dans JavaScript améliorent la concision du code, la réutilisabilité, la modularité et les performances par abstraction, modèles communs et techniques d'optimisation.

Comment fonctionne le currying en JavaScript et quels sont ses avantages? Comment fonctionne le currying en JavaScript et quels sont ses avantages? Mar 18, 2025 pm 01:45 PM

L'article traite du curry dans JavaScript, une technique transformant les fonctions mulguments en séquences de fonctions à argument unique. Il explore la mise en œuvre du currying, des avantages tels que des applications partielles et des utilisations pratiques, améliorant le code

Comment fonctionne l'algorithme de réconciliation React? Comment fonctionne l'algorithme de réconciliation React? Mar 18, 2025 pm 01:58 PM

L'article explique l'algorithme de réconciliation de React, qui met à jour efficacement le DOM en comparant les arbres DOM virtuels. Il traite des avantages de la performance, des techniques d'optimisation et des impacts sur l'expérience utilisateur. Compte de charge: 159

Qu'est-ce que UseContext? Comment l'utilisez-vous pour partager l'état entre les composants? Qu'est-ce que UseContext? Comment l'utilisez-vous pour partager l'état entre les composants? Mar 19, 2025 pm 03:59 PM

L'article explique UseContext dans React, qui simplifie la gestion de l'État en évitant le forage des accessoires. Il traite des avantages tels que les améliorations centralisées de l'État et des performances grâce à des redevances réduites.

Comment empêchez-vous le comportement par défaut dans les gestionnaires d'événements? Comment empêchez-vous le comportement par défaut dans les gestionnaires d'événements? Mar 19, 2025 pm 04:10 PM

L'article discute de la prévention des comportements par défaut dans les gestionnaires d'événements à l'aide de la méthode empêchée dedEfault (), de ses avantages tels que une expérience utilisateur améliorée et des problèmes potentiels tels que les problèmes d'accessibilité.

Quels sont les avantages et les inconvénients des composants contrôlés et incontrôlés? Quels sont les avantages et les inconvénients des composants contrôlés et incontrôlés? Mar 19, 2025 pm 04:16 PM

L'article traite des avantages et des inconvénients des composants contrôlés et incontrôlés dans la réaction, en se concentrant sur des aspects tels que la prévisibilité, la performance et les cas d'utilisation. Il conseille les facteurs à considérer lors du choix entre eux.

See all articles