温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用D3.js+Vue实现柱形图

发布时间:2021-04-23 12:45:28 来源:亿速云 阅读:438 作者:小新 栏目:web开发

小编给大家分享一下如何使用D3.js+Vue实现柱形图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

为什么要使用Vue

Vue是一款友好的、多用途且高性能的JavaScript框架,使用vue可以创建可维护性和可测试性更强的代码库,Vue允许可以将一个网页分割成可复用的组件,每个组件都包含属于自己的HTML、CSS、JavaScript,以用来渲染网页中相应的地方,所以越来越多的前端开发者使用vue。

最近想在Vue的项目里尝试使用d3.js,封装一些常用的图表。这里记录一下自己搭建项目的过程,以及实现一个简单的柱形图。不了解D3的请移步D3 Data-Driven Documents,它是基于数据驱动文档工作方式的一款JavaScript函数库,主要用于网页作图、生成互动图形,是最流行的可视化库之一。

说明

  • 采用Vue-cli脚手架快速搭建项目

  • npm 安装 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.在Vue中获取dom元素

在vue中可以通过给标签添加ref属性,然后在js中利用this.$refs去引用它,从而操作该dom元素

<template>  <div>   <h4>一个简单的图表</h4>   <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.矩形和label文字的容器,用于添加元素
在有数据却没有足够图形元素的时候,可以使用以下链式方法添加足够的元素:

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.添加矩形和label文字

// 添加矩形  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 })

绘制后的图形如下:

如何使用D3.js+Vue实现柱形图 

使用该组件

怎么使用我们定义好的柱形图组件呢,分3步走:

1. import导入

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.js+Vue实现柱形图

以上是“如何使用D3.js+Vue实现柱形图”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI