欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用D3.js+Vue實(shí)現(xiàn)一個(gè)簡(jiǎn)單的柱形圖

 更新時(shí)間:2018年08月05日 10:13:24   作者:levin在掘金  
這篇文章主要介紹了使用D3.js+Vue實(shí)現(xiàn)一個(gè)簡(jiǎn)單的柱形圖,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

最近想在Vue的項(xiàng)目里嘗試使用d3.js,封裝一些常用的圖表。這里記錄一下自己搭建項(xiàng)目的過(guò)程,以及實(shí)現(xiàn)一個(gè)簡(jiǎn)單的柱形圖。不了解D3的請(qǐng)移步D3 Data-Driven Documents,它是基于數(shù)據(jù)驅(qū)動(dòng)文檔工作方式的一款JavaScript函數(shù)庫(kù),主要用于網(wǎng)頁(yè)作圖、生成互動(dòng)圖形,是最流行的可視化庫(kù)之一。

說(shuō)明

  • 采用Vue-cli腳手架快速搭建項(xiàng)目
  • npm 安裝 D3
  • 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的柱形圖

項(xiàng)目搭建

使用vue-cli搭建單頁(yè)應(yīng)用:

# 安裝 vue-cli
$ npm install --global vue-cli
# 使用 "webpack" 模板創(chuàng)建一個(gè)新項(xiàng)目
$ vue init webpack d3-vue
# 安裝依賴(lài),然后開(kāi)始!
$ cd d3-vue
$ npm run dev

D3安裝(最新的v5版本):

$ npm install d3 --save

D3引入:

$ import * as d3 from 'd3'

實(shí)現(xiàn)一個(gè)簡(jiǎn)單的圖表

1.在Vue中獲取dom元素

在vue中可以通過(guò)給標(biāo)簽添加ref屬性,然后在js中利用this.$refs去引用它,從而操作該dom元素

<template>
 <div>
  <h3>一個(gè)簡(jiǎn)單的圖表</h3>
  <svg ref="baseBarChart" class="base-bar-chart"></svg>
 </div>
</template>
// 省略的代碼...
var chartSvg = d3.select(this.$refs.baseBarChart)

2.設(shè)置圖表數(shù)據(jù)

矩形圖主要構(gòu)成部分有矩形、坐標(biāo)軸和文字說(shuō)明,我們需要的數(shù)據(jù)有圖表的數(shù)據(jù)、圖表寬度和矩形寬度

// 設(shè)置圖表數(shù)據(jù),圖表寬度和矩形寬度
 var chartData = this.chartData
 var width = this.width
 var barHeight = this.barHeight

3.添加畫(huà)布

要繪圖,首先需要的是一塊繪圖的畫(huà)布。D3提供了眾多的SVG圖形的生成器,我們?cè)谶@里使用SVG畫(huà)布。選擇文檔中的svg元素,這里用到了$refs屬性

// 畫(huà)布
 var chartSvg = d3.select(this.$refs.baseBarChart)
 .attr('width', width)
 .attr('height', barHeight * chartData.length)

4.x軸比例尺

d3.scaleLinear(),線性比例尺,將一個(gè)連續(xù)的區(qū)間映射到另一區(qū)間。繪圖時(shí)如果直接根據(jù)給出的數(shù)據(jù)給矩形的寬度賦值,有很大的局限性。比如一組數(shù)據(jù)里有一個(gè)數(shù)值為2000,我們是不可能用2000個(gè)像素來(lái)代表矩形的寬度的,因?yàn)楫?huà)布沒(méi)有那么長(zhǎng)。這個(gè)時(shí)候我們就需要把某一區(qū)域的值映射到另一區(qū)域,轉(zhuǎn)換的過(guò)程中大小關(guān)系不變。

// x軸比例尺
 var xScale = d3.scaleLinear()
 .domain([0, d3.max(chartData)])
 .range([0, width])

5.矩形和label文字的容器,用于添加元素
在有數(shù)據(jù)卻沒(méi)有足夠圖形元素的時(shí)候,可以使用以下鏈?zhǔn)椒椒ㄌ砑幼銐虻脑?

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 })

繪制后的圖形如下:

 

使用該組件

怎么使用我們定義好的柱形圖組件呢,分3步走:

1. import導(dǎo)入

2.設(shè)置數(shù)據(jù)

3.通過(guò)屬性值傳遞給子組件

<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
   }
  }
 }
}

路由配置和數(shù)據(jù)請(qǐng)求

剩下的一部分就是各個(gè)頁(yè)面的vue-router路由配置和主頁(yè)的axios數(shù)據(jù)請(qǐng)求。

項(xiàng)目地址:d3-vue

總結(jié)

以上所述是小編給大家介紹的使用D3.js+Vue實(shí)現(xiàn)一個(gè)簡(jiǎn)單的柱形圖,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!

相關(guān)文章

  • Vue使用Vue-cropper實(shí)現(xiàn)圖片裁剪

    Vue使用Vue-cropper實(shí)現(xiàn)圖片裁剪

    這篇文章主要為大家詳細(xì)介紹了Vue使用Vue-cropper實(shí)現(xiàn)圖片裁剪,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • vue3基于script?setup語(yǔ)法$refs的使用

    vue3基于script?setup語(yǔ)法$refs的使用

    這篇文章主要介紹了vue3基于script?setup語(yǔ)法$refs的使用,<BR>?在用vue3開(kāi)發(fā)項(xiàng)目的時(shí)候,需要調(diào)用子組件的方法,于是想著用$refs來(lái)實(shí)現(xiàn),但是我是使用script?setup語(yǔ)法糖,原先vue2的語(yǔ)法已經(jīng)不適用了。下面我們一起進(jìn)入文章看詳細(xì)內(nèi)容吧</P><P>
    2021-12-12
  • 淺談vue項(xiàng)目重構(gòu)技術(shù)要點(diǎn)和總結(jié)

    淺談vue項(xiàng)目重構(gòu)技術(shù)要點(diǎn)和總結(jié)

    這篇文章主要介紹了淺談vue項(xiàng)目重構(gòu)技術(shù)要點(diǎn)和總結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Vue實(shí)現(xiàn)簡(jiǎn)單搜索功能的示例代碼

    Vue實(shí)現(xiàn)簡(jiǎn)單搜索功能的示例代碼

    在vue項(xiàng)目中,搜索功能是我們經(jīng)常需要使用的一個(gè)場(chǎng)景,最常用的是在列表數(shù)據(jù)中搜索一個(gè)想要的,今天的例子就是我們實(shí)現(xiàn)vue從列表數(shù)據(jù)中搜索,希望對(duì)大家有所幫助
    2023-03-03
  • Vue中混入mixin的用法介紹

    Vue中混入mixin的用法介紹

    混入 (mixin) 提供了一種非常靈活的方式,來(lái)分發(fā) Vue 組件中的可復(fù)用功能。一個(gè)混入對(duì)象可以包含任意組件選項(xiàng)。當(dāng)組件使用混入對(duì)象時(shí),所有混入對(duì)象的選項(xiàng)將被“混合”進(jìn)入該組件本身的選項(xiàng)
    2022-10-10
  • Nuxt.js實(shí)戰(zhàn)詳解

    Nuxt.js實(shí)戰(zhàn)詳解

    這篇文章主要介紹了Nuxt.js實(shí)戰(zhàn)詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Vue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn)

    Vue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn)

    這篇文章主要介紹了Vue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • element-ui多選表格禁用某一行不被選擇問(wèn)題

    element-ui多選表格禁用某一行不被選擇問(wèn)題

    這篇文章主要介紹了element-ui多選表格禁用某一行不被選擇問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue指令之v-for的使用說(shuō)明

    Vue指令之v-for的使用說(shuō)明

    這篇文章主要介紹了Vue指令之v-for的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue.js編譯時(shí)給生成的文件增加版本號(hào)

    vue.js編譯時(shí)給生成的文件增加版本號(hào)

    這篇文章主要介紹了vue.js編譯時(shí)給生成的文件增加版本號(hào),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09

最新評(píng)論