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

D3.js(v3)+react 實(shí)現(xiàn)帶坐標(biāo)與比例尺的柱形圖 (V3版本)

 更新時(shí)間:2019年05月09日 10:56:02   作者:溢楊年華  
這篇文章主要介紹了D3.js(v3)+react 制作 一個(gè)帶坐標(biāo)與比例尺的柱形圖 (V3版本) ,本文通過實(shí)例代碼文字相結(jié)合的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下

現(xiàn)在用D3.js + react做一個(gè)帶坐標(biāo)軸和比例尺的柱形圖。我已經(jīng)盡力把代碼全部注釋上了,最后我也會(huì)把完整柱形圖代碼奉上。如果還有疑惑的,可以去翻看一下我之前介紹的方法,以下方法都有介紹到。

還有數(shù)據(jù)都是自己定義的假數(shù)據(jù),大家參考一下制作方法即可。

首先定義柱形圖的數(shù)據(jù)、繪圖區(qū)域的寬高、和上下左右的邊距:

var width = 600;        //SVG繪制區(qū)域的寬度
  var height = 500;        //SVG繪制區(qū)域的高度
  //定義數(shù)據(jù)
  var dataList = [50,43,120,87,99,167,142]
  //定義上下左右的邊距
  var padding = {top:20,right:20,bottom:100,left:100}

然后設(shè)定SVG:

 var svg = d3.select("#body")     //選擇id為body的div
     .append("svg")      //在<body>中添加<avg>      .attr("width",width)    //設(shè)定<svg>的寬度屬性
      .attr("height",height)    //設(shè)定<svg>的高度屬性

定義比例尺:

//定義比例尺
  //x軸寬度
  var xAxisWidth = 300;
  //y軸寬度
  var yAxisWidth = 300;

  //x軸比例尺(序數(shù)比例尺)
  var xScale = d3.scale.ordinal()     //構(gòu)建一個(gè)序數(shù)比例尺
     .domain(d3.range(dataList.length)) //設(shè)定定義域
     .rangeRoundBands([0,xAxisWidth],0.2)//代替range()設(shè)定值域,并將結(jié)果取整
  //y軸比例尺(線性比例尺)
  var yScale = d3.scale.linear()     //創(chuàng)建一個(gè)線性比例尺
     .domain([0,d3.max(dataList)])  //設(shè)定定義域
     .range([0,yAxisWidth])    //設(shè)定值域

然后添加矩形:

//添加矩形
   svg.selectAll("rect")
     .data(dataList)      //綁定數(shù)據(jù)
     .enter()       //獲取enter部分
     .append("rect")      //添加rect元素,使其與綁定數(shù)組的長(zhǎng)度一致
     .attr("fill","fuchsia")    //設(shè)置顏色
     .attr("x",function(d,i){   //設(shè)置矩形的x坐標(biāo)
      return padding.left+xScale(i)
     })
     .attr("y",function(d){    //設(shè)置矩形的y坐標(biāo)
      return height - padding.bottom-yScale(d)
     })
     .attr("width",xScale.rangeBand()) //設(shè)置矩形的寬度
     .attr("height",function(d){   //設(shè)置矩形的高度
      return yScale(d)
     })

然后為矩形添加文字標(biāo)簽:

//為矩形添加標(biāo)簽文字
    svg.selectAll("text")
     .data(dataList)      //綁定數(shù)據(jù)
     .enter()       //獲取enter部分
     .append("text")      //添加text元素,使其與綁定數(shù)組的長(zhǎng)度一致
     .attr("fill","white")    //字體顏色
     .attr("font-size","14px")   //字體大小
     .attr("text-anchor","middle")  //文本相對(duì)基點(diǎn)的位置
     .attr("x",function(d,i){   //設(shè)置文字的x坐標(biāo)
      return padding.left+xScale(i)
     }) 
     .attr("y",function(d){    //設(shè)置文字的y坐標(biāo)
      return height - padding.bottom - yScale(d)
     })
     .attr("dx",xScale.rangeBand()/2) //相對(duì)于當(dāng)前位置在x方向上平移的距離  
     .attr("dy","2em")     //相對(duì)于當(dāng)前位置在y方向上平移的距離
     .text(function(d){     //文字內(nèi)容
      return d
     })

最后定義坐標(biāo)軸:

//定義坐標(biāo)軸
  //x軸
  var xAxis = d3.svg.axis()      //創(chuàng)建一個(gè)默認(rèn)的新坐標(biāo)軸      
     .scale(xScale)      //設(shè)定坐標(biāo)軸的比例尺
     .orient("bottom")     //設(shè)定坐標(biāo)軸的方向
  //重新設(shè)置y軸比例尺的值域,與原來的相反
  yScale.range([yAxisWidth,0])
  //y軸
  var yAxis = d3.svg.axis()      //創(chuàng)建一個(gè)默認(rèn)的新坐標(biāo)軸 
     .scale(yScale)      //設(shè)定坐標(biāo)軸的比例尺
     .orient("left")      //設(shè)定坐標(biāo)軸的方向
     
  //添加x軸和平移
  svg.append("g")         //在svg中添加一個(gè)包含坐標(biāo)軸各元素的g元素
   .attr("class","axis")      //定義class名
   .attr("transform","translate("+padding.left + "," + (height-padding.bottom)+")") //將x軸進(jìn)行平移
   .call(xAxis)        //將自身作為參數(shù)傳遞給xAxis函數(shù)
  //添加y軸和平移
  svg.append("g")         //在svg中添加一個(gè)包含坐標(biāo)軸各元素的g元素
   .attr("class","axis")      //定義class名
   .attr("transform","translate("+padding.left+","+(height-padding.bottom-yAxisWidth)+")") //將y軸進(jìn)行平移
   .call(yAxis)        //將自身作為參數(shù)傳遞給yAxis函數(shù)

大家看一下效果圖:

完整代碼:

import React, { Component } from 'react';
import * as d3 from 'd3'; //引入d3
class Bar extends Component {
 constructor(props) {
  super(props);
  this.state = {}
 }

 componentDidMount(){   //將方法在componentDidMount生命周期鉤子函數(shù)中面調(diào)用
  this.oneMethod()
 }
 oneMethod(){
  var width = 600;        //SVG繪制區(qū)域的寬度
  var height = 500;        //SVG繪制區(qū)域的高度
  //定義數(shù)據(jù)
  var dataList = [50,43,120,87,99,167,142]
  //定義上下左右的邊距
  var padding = {top:20,right:20,bottom:100,left:100}
  var svg = d3.select("#body")     //選擇id為body的div
     .append("svg")      //在<body>中添加<avg>
     .attr("width",width)    //設(shè)定<svg>的寬度屬性
     .attr("height",height)    //設(shè)定<svg>的高度屬性
  //定義比例尺
  //x軸寬度
  var xAxisWidth = 300;
  //y軸寬度
  var yAxisWidth = 300;
  //x軸比例尺(序數(shù)比例尺)
  var xScale = d3.scale.ordinal()     //構(gòu)建一個(gè)序數(shù)比例尺
     .domain(d3.range(dataList.length)) //設(shè)定定義域
     .rangeRoundBands([0,xAxisWidth],0.2)//代替range()設(shè)定值域,并將結(jié)果取整
  //y軸比例尺(線性比例尺)
  var yScale = d3.scale.linear()     //創(chuàng)建一個(gè)線性比例尺
     .domain([0,d3.max(dataList)])  //設(shè)定定義域
     .range([0,yAxisWidth])    //設(shè)定值域
  //添加矩形
   svg.selectAll("rect")
     .data(dataList)      //綁定數(shù)據(jù)
     .enter()       //獲取enter部分
     .append("rect")      //添加rect元素,使其與綁定數(shù)組的長(zhǎng)度一致
     .attr("fill","fuchsia")    //設(shè)置顏色
     .attr("x",function(d,i){   //設(shè)置矩形的x坐標(biāo)
      return padding.left+xScale(i)
     })
     .attr("y",function(d){    //設(shè)置矩形的y坐標(biāo)
      return height - padding.bottom-yScale(d)
     })
     .attr("width",xScale.rangeBand()) //設(shè)置矩形的寬度
     .attr("height",function(d){   //設(shè)置矩形的高度
      return yScale(d)
     })
  //為矩形添加標(biāo)簽文字
    svg.selectAll("text")
     .data(dataList)      //綁定數(shù)據(jù)
     .enter()       //獲取enter部分
     .append("text")      //添加text元素,使其與綁定數(shù)組的長(zhǎng)度一致
     .attr("fill","white")    //字體顏色
     .attr("font-size","14px")   //字體大小
     .attr("text-anchor","middle")  //文本相對(duì)基點(diǎn)的位置
     .attr("x",function(d,i){   //設(shè)置文字的x坐標(biāo)
      return padding.left+xScale(i)
     }) 
     .attr("y",function(d){    //設(shè)置文字的y坐標(biāo)
      return height - padding.bottom - yScale(d)
     })
     .attr("dx",xScale.rangeBand()/2) //相對(duì)于當(dāng)前位置在x方向上平移的距離  
     .attr("dy","2em")     //相對(duì)于當(dāng)前位置在y方向上平移的距離
     .text(function(d){     //文字內(nèi)容
      return d
     })
  //定義坐標(biāo)軸
  //x軸
  var xAxis = d3.svg.axis()      //創(chuàng)建一個(gè)默認(rèn)的新坐標(biāo)軸      
     .scale(xScale)      //設(shè)定坐標(biāo)軸的比例尺
     .orient("bottom")     //設(shè)定坐標(biāo)軸的方向
  //重新設(shè)置y軸比例尺的值域,與原來的相反
  yScale.range([yAxisWidth,0])
  //y軸
  var yAxis = d3.svg.axis()      //創(chuàng)建一個(gè)默認(rèn)的新坐標(biāo)軸 
     .scale(yScale)      //設(shè)定坐標(biāo)軸的比例尺
     .orient("left")      //設(shè)定坐標(biāo)軸的方向
  //添加x軸和平移
  svg.append("g")         //在svg中添加一個(gè)包含坐標(biāo)軸各元素的g元素
   .attr("class","axis")      //定義class名
   .attr("transform","translate("+padding.left + "," + (height-padding.bottom)+")") //將x軸進(jìn)行平移
   .call(xAxis)        //將自身作為參數(shù)傳遞給xAxis函數(shù)
  //添加y軸和平移
  svg.append("g")         //在svg中添加一個(gè)包含坐標(biāo)軸各元素的g元素
   .attr("class","axis")      //定義class名
   .attr("transform","translate("+padding.left+","+(height-padding.bottom-yAxisWidth)+")") //將y軸進(jìn)行平移
   .call(yAxis)        //將自身作為參數(shù)傳遞給yAxis函數(shù)
 }
 
 render() {
  return (
   <div id="body" >
   </div>
  );
 }
}
export default Bar;

總結(jié)

以上所述是小編給大家介紹的D3.js(v3)+react 實(shí)現(xiàn)帶坐標(biāo)與比例尺的柱形圖 (V3版本),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • React 數(shù)據(jù)獲取與性能優(yōu)化詳解

    React 數(shù)據(jù)獲取與性能優(yōu)化詳解

    這篇文章主要為大家介紹了React 數(shù)據(jù)獲取與性能優(yōu)化方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • React memo減少重復(fù)渲染詳解

    React memo減少重復(fù)渲染詳解

    React.memo為高階組件。它與React.PureComponent 非常相似,但它適用于函數(shù)組件,但不適用于class組件。文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-10-10
  • 一文教你如何避免React中常見的8個(gè)錯(cuò)誤

    一文教你如何避免React中常見的8個(gè)錯(cuò)誤

    這篇文章主要來和大家一起分享在?React?開發(fā)中常見的一些錯(cuò)誤,以及如何避免這些錯(cuò)誤,理解這些問題背后的細(xì)節(jié),防止犯下類似的錯(cuò)誤,需要的可以參考下
    2023-12-12
  • react項(xiàng)目打包后點(diǎn)擊index.html頁面出現(xiàn)空白的問題

    react項(xiàng)目打包后點(diǎn)擊index.html頁面出現(xiàn)空白的問題

    這篇文章主要介紹了react項(xiàng)目打包后點(diǎn)擊index.html頁面出現(xiàn)空白的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • react中的useContext具體實(shí)現(xiàn)

    react中的useContext具體實(shí)現(xiàn)

    useContext是React提供的一個(gè)鉤子函數(shù),用于在函數(shù)組件中訪問和使用Context,useContext的實(shí)現(xiàn)原理涉及React內(nèi)部的機(jī)制,本文給大家介紹react中的useContext具體實(shí)現(xiàn),感興趣的朋友一起看看吧
    2023-11-11
  • React生命周期函數(shù)深入全面介紹

    React生命周期函數(shù)深入全面介紹

    生命周期函數(shù)指在某一時(shí)刻組件會(huì)自動(dòng)調(diào)用并執(zhí)行的函數(shù)。React每個(gè)類組件都包含生命周期方法,以便于在運(yùn)行過程中特定的階段執(zhí)行這些方法
    2022-09-09
  • React中props使用教程

    React中props使用教程

    props是組件(包括函數(shù)組件和class組件)間的內(nèi)置屬性,用其可以傳遞數(shù)據(jù)給子節(jié)點(diǎn),props用來傳遞參數(shù)。組件實(shí)例化過程中,你可以向其中傳遞一個(gè)參數(shù),這個(gè)參數(shù)會(huì)在實(shí)例化過程中被引用
    2022-09-09
  • react中實(shí)現(xiàn)拖拽排序react-dnd功能

    react中實(shí)現(xiàn)拖拽排序react-dnd功能

    這篇文章主要介紹了react中實(shí)現(xiàn)拖拽排序react-dnd功能,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • React中嵌套組件與被嵌套組件的通信過程

    React中嵌套組件與被嵌套組件的通信過程

    這篇文章主要介紹了React中嵌套組件與被嵌套組件的通信過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • React狀態(tài)更新的優(yōu)先級(jí)機(jī)制源碼解析

    React狀態(tài)更新的優(yōu)先級(jí)機(jī)制源碼解析

    這篇文章主要為大家介紹了React狀態(tài)更新的優(yōu)先級(jí)機(jī)制源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11

最新評(píng)論