最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用D3.js+Vue實現(xiàn)一個簡單的柱形圖

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

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

說明

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

項目搭建

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

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

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

$ npm install d3 --save

D3引入:

$ import * as d3 from 'd3'

實現(xiàn)一個簡單的圖表

1.在Vue中獲取dom元素

在vue中可以通過給標(biāo)簽添加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.設(shè)置圖表數(shù)據(jù)

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

// 設(shè)置圖表數(shù)據(jù),圖表寬度和矩形寬度
 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(),線性比例尺,將一個連續(xù)的區(qū)間映射到另一區(qū)間。繪圖時如果直接根據(jù)給出的數(shù)據(jù)給矩形的寬度賦值,有很大的局限性。比如一組數(shù)據(jù)里有一個數(shù)值為2000,我們是不可能用2000個像素來代表矩形的寬度的,因為畫布沒有那么長。這個時候我們就需要把某一區(qū)域的值映射到另一區(qū)域,轉(zhuǎn)換的過程中大小關(guān)系不變。

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

5.矩形和label文字的容器,用于添加元素
在有數(shù)據(jù)卻沒有足夠圖形元素的時候,可以使用以下鏈?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.通過屬性值傳遞給子組件

<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ù)請求

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

項目地址:d3-vue

總結(jié)

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

相關(guān)文章

  • vuex存儲數(shù)據(jù)的幾種方法實例詳解

    vuex存儲數(shù)據(jù)的幾種方法實例詳解

    在瀏覽網(wǎng)頁時我們有些時候需要記住一些用戶選擇的信息,比如登陸時我們?nèi)绻x擇了記住密碼,那么我們下次進入該網(wǎng)頁時就會有你上次的登陸信息,下面這篇文章主要給大家介紹了關(guān)于vuex存儲數(shù)據(jù)的幾種方法,需要的朋友可以參考下
    2022-10-10
  • printJS打印問題匯總以及解決辦法

    printJS打印問題匯總以及解決辦法

    Print.js一個小的javascript庫,可幫助您從網(wǎng)絡(luò)上打印,這篇文章主要給大家介紹了關(guān)于printJS打印問題匯總以及解決辦法的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • Vue實現(xiàn)電子簽名功能的完整代碼

    Vue實現(xiàn)電子簽名功能的完整代碼

    本文介紹了在Vue項目中實現(xiàn)電子簽名功能的步驟,包括將原始文檔轉(zhuǎn)換為圖片、使用`signature_pad`和`html2canvas`庫、調(diào)整簽名位置和縮放比例、合并圖片等步驟,并提供了完整的源碼,需要的朋友可以參考下
    2025-02-02
  • LogicFlow插件使用前準(zhǔn)備詳解

    LogicFlow插件使用前準(zhǔn)備詳解

    這篇文章主要為大家介紹了LogicFlow插件使用前準(zhǔn)備詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 如何解決前端上傳Formdata中的file為[object?Object]的問題

    如何解決前端上傳Formdata中的file為[object?Object]的問題

    文件上傳是Web開發(fā)中常見的功能之一,下面這篇文章主要給大家介紹了關(guān)于如何解決前端上傳Formdata中的file為[object?Object]問題的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • Vue一個案例引發(fā)的遞歸組件的使用詳解

    Vue一個案例引發(fā)的遞歸組件的使用詳解

    這篇文章主要介紹了Vue一個案例引發(fā)的遞歸組件的使用,本文主要給大家展示如何在項目中使用遞歸組件,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • 解決vue admin element noCache設(shè)置無效的問題

    解決vue admin element noCache設(shè)置無效的問題

    今天小編就為大家分享一篇解決vue admin element noCache設(shè)置無效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Vue實現(xiàn)Chrome小恐龍游戲的示例代碼

    Vue實現(xiàn)Chrome小恐龍游戲的示例代碼

    Google 給 Chrome 瀏覽器加了一個有趣的彩蛋,本文就詳細(xì)的介紹一下Vue實現(xiàn)Chrome小恐龍游戲的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2022-04-04
  • vue watch監(jiān)聽數(shù)據(jù)變化的案例詳解

    vue watch監(jiān)聽數(shù)據(jù)變化的案例詳解

    監(jiān)聽數(shù)據(jù)變化,在Vue中是通過偵聽器來實現(xiàn)的,你也可以將它理解為監(jiān)聽器,時刻監(jiān)聽某個數(shù)據(jù)的變化,本文將通過代碼示例為大家詳細(xì)的介紹一下vue watch如何監(jiān)聽數(shù)據(jù)變化,需要的朋友可以參考下
    2023-07-07
  • vue draggable resizable 實現(xiàn)可拖拽縮放的組件功能

    vue draggable resizable 實現(xiàn)可拖拽縮放的組件功能

    這篇文章主要介紹了vue draggable resizable 實現(xiàn)可拖拽縮放的組件功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07

最新評論

搜索| 江城| 沁源县| 陆河县| 徐水县| 新巴尔虎左旗| 金沙县| 大方县| 绥棱县| 宝清县| 佛教| 陆川县| 闽清县| 英吉沙县| 自贡市| 大悟县| 肃南| 新宁县| 苍南县| 酒泉市| 南安市| 布拖县| 汤原县| 宾阳县| 周宁县| 崇州市| 商南县| 望奎县| 南昌县| 乐业县| 理塘县| 玉屏| 绥滨县| 成武县| 锦屏县| 泾川县| 海淀区| 和林格尔县| 亚东县| 砀山县| 苏州市|