使用D3.js+Vue实现一个简单的柱形图

栏目: 编程语言 · 发布时间: 7年前

内容简介:最近想在Vue的项目里尝试使用d3.js,封装一些常用的图表。这里记录一下自己搭建项目的过程,以及实现一个简单的柱形图。不了解D3的请移步使用vue-cli搭建单页应用:D3安装(最新的v5版本):

最近想在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>
        <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.矩形和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
            }
        }
    }
}
复制代码

项目地址:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Beginning Apache Struts

Beginning Apache Struts

Arnold Doray / Apress / 2006-02-20 / USD 44.99

Beginning Apache Struts will provide you a working knowledge of Apache Struts 1.2. This book is ideal for you Java programmers who have some JSP familiarity, but little or no prior experience with Ser......一起来看看 《Beginning Apache Struts》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

在线进制转换器
在线进制转换器

各进制数互转换器

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具