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

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

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

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

還有數(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}

然后設定SVG:

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

定義比例尺:

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

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

然后添加矩形:

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

然后為矩形添加文字標簽:

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

最后定義坐標軸:

//定義坐標軸
  //x軸
  var xAxis = d3.svg.axis()      //創(chuàng)建一個默認的新坐標軸      
     .scale(xScale)      //設定坐標軸的比例尺
     .orient("bottom")     //設定坐標軸的方向
  //重新設置y軸比例尺的值域,與原來的相反
  yScale.range([yAxisWidth,0])
  //y軸
  var yAxis = d3.svg.axis()      //創(chuàng)建一個默認的新坐標軸 
     .scale(yScale)      //設定坐標軸的比例尺
     .orient("left")      //設定坐標軸的方向
     
  //添加x軸和平移
  svg.append("g")         //在svg中添加一個包含坐標軸各元素的g元素
   .attr("class","axis")      //定義class名
   .attr("transform","translate("+padding.left + "," + (height-padding.bottom)+")") //將x軸進行平移
   .call(xAxis)        //將自身作為參數(shù)傳遞給xAxis函數(shù)
  //添加y軸和平移
  svg.append("g")         //在svg中添加一個包含坐標軸各元素的g元素
   .attr("class","axis")      //定義class名
   .attr("transform","translate("+padding.left+","+(height-padding.bottom-yAxisWidth)+")") //將y軸進行平移
   .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)    //設定<svg>的寬度屬性
     .attr("height",height)    //設定<svg>的高度屬性
  //定義比例尺
  //x軸寬度
  var xAxisWidth = 300;
  //y軸寬度
  var yAxisWidth = 300;
  //x軸比例尺(序數(shù)比例尺)
  var xScale = d3.scale.ordinal()     //構(gòu)建一個序數(shù)比例尺
     .domain(d3.range(dataList.length)) //設定定義域
     .rangeRoundBands([0,xAxisWidth],0.2)//代替range()設定值域,并將結(jié)果取整
  //y軸比例尺(線性比例尺)
  var yScale = d3.scale.linear()     //創(chuàng)建一個線性比例尺
     .domain([0,d3.max(dataList)])  //設定定義域
     .range([0,yAxisWidth])    //設定值域
  //添加矩形
   svg.selectAll("rect")
     .data(dataList)      //綁定數(shù)據(jù)
     .enter()       //獲取enter部分
     .append("rect")      //添加rect元素,使其與綁定數(shù)組的長度一致
     .attr("fill","fuchsia")    //設置顏色
     .attr("x",function(d,i){   //設置矩形的x坐標
      return padding.left+xScale(i)
     })
     .attr("y",function(d){    //設置矩形的y坐標
      return height - padding.bottom-yScale(d)
     })
     .attr("width",xScale.rangeBand()) //設置矩形的寬度
     .attr("height",function(d){   //設置矩形的高度
      return yScale(d)
     })
  //為矩形添加標簽文字
    svg.selectAll("text")
     .data(dataList)      //綁定數(shù)據(jù)
     .enter()       //獲取enter部分
     .append("text")      //添加text元素,使其與綁定數(shù)組的長度一致
     .attr("fill","white")    //字體顏色
     .attr("font-size","14px")   //字體大小
     .attr("text-anchor","middle")  //文本相對基點的位置
     .attr("x",function(d,i){   //設置文字的x坐標
      return padding.left+xScale(i)
     }) 
     .attr("y",function(d){    //設置文字的y坐標
      return height - padding.bottom - yScale(d)
     })
     .attr("dx",xScale.rangeBand()/2) //相對于當前位置在x方向上平移的距離  
     .attr("dy","2em")     //相對于當前位置在y方向上平移的距離
     .text(function(d){     //文字內(nèi)容
      return d
     })
  //定義坐標軸
  //x軸
  var xAxis = d3.svg.axis()      //創(chuàng)建一個默認的新坐標軸      
     .scale(xScale)      //設定坐標軸的比例尺
     .orient("bottom")     //設定坐標軸的方向
  //重新設置y軸比例尺的值域,與原來的相反
  yScale.range([yAxisWidth,0])
  //y軸
  var yAxis = d3.svg.axis()      //創(chuàng)建一個默認的新坐標軸 
     .scale(yScale)      //設定坐標軸的比例尺
     .orient("left")      //設定坐標軸的方向
  //添加x軸和平移
  svg.append("g")         //在svg中添加一個包含坐標軸各元素的g元素
   .attr("class","axis")      //定義class名
   .attr("transform","translate("+padding.left + "," + (height-padding.bottom)+")") //將x軸進行平移
   .call(xAxis)        //將自身作為參數(shù)傳遞給xAxis函數(shù)
  //添加y軸和平移
  svg.append("g")         //在svg中添加一個包含坐標軸各元素的g元素
   .attr("class","axis")      //定義class名
   .attr("transform","translate("+padding.left+","+(height-padding.bottom-yAxisWidth)+")") //將y軸進行平移
   .call(yAxis)        //將自身作為參數(shù)傳遞給yAxis函數(shù)
 }
 
 render() {
  return (
   <div id="body" >
   </div>
  );
 }
}
export default Bar;

總結(jié)

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

相關(guān)文章

  • React配置代理方式(proxy)

    React配置代理方式(proxy)

    這篇文章主要介紹了React配置代理方式(proxy),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 使用react-router4.0實現(xiàn)重定向和404功能的方法

    使用react-router4.0實現(xiàn)重定向和404功能的方法

    本篇文章主要介紹了使用react-router4.0實現(xiàn)重定向和404功能的方法,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • 使用 React hooks 實現(xiàn)類所有生命周期

    使用 React hooks 實現(xiàn)類所有生命周期

    react 自 16.8 開始,引入了 Hooks 概念,使得函數(shù)組件中也可以擁有自己的狀態(tài),并且可以模擬對應的生命周期,這篇文章主要介紹了使用 React hooks 怎么實現(xiàn)類里面的所有生命周期,需要的朋友可以參考下
    2023-02-02
  • React項目中應用TypeScript的實現(xiàn)

    React項目中應用TypeScript的實現(xiàn)

    TypeScript通常都會依賴于框架,例如和vue、react 這些框架結(jié)合,本文就主要介紹了React項目中應用TypeScript的實現(xiàn),分享給大家,具體如下:
    2021-09-09
  • next-redux-wrapper使用細節(jié)及源碼分析

    next-redux-wrapper使用細節(jié)及源碼分析

    這篇文章主要為大家介紹了next-redux-wrapper使用細節(jié)及源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • create-react-app開發(fā)常用配置教程

    create-react-app開發(fā)常用配置教程

    這篇文章主要為大家介紹了create-react-app開發(fā)常用配置教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • react實現(xiàn)圖片懶加載的三種方式

    react實現(xiàn)圖片懶加載的三種方式

    本文主要介紹了react實現(xiàn)圖片懶加載的三種方式,包括利用瀏覽器原生的loading="lazy"屬性,使用react-lazyload庫以及通過IntersectionObserver API手動實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • react?redux的原理以及基礎(chǔ)使用講解

    react?redux的原理以及基礎(chǔ)使用講解

    這篇文章主要介紹了react?redux的原理以及基礎(chǔ)使用講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • react-three-fiber實現(xiàn)炫酷3D粒子效果首頁

    react-three-fiber實現(xiàn)炫酷3D粒子效果首頁

    這篇文章主要介紹了react-three-fiber實現(xiàn)3D粒子效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • React學習筆記之事件處理(二)

    React學習筆記之事件處理(二)

    這篇文章主要跟大家介紹了關(guān)于React中事件處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習React具有一定的參考學習價值,需要的朋友們下面跟著小編一起來學習學習吧。
    2017-07-07

最新評論

奇台县| 海门市| 当涂县| 延川县| 交口县| 星座| 司法| 丰原市| 富顺县| 十堰市| 泰兴市| 西城区| 达州市| 沅陵县| 开封县| 正蓝旗| 岗巴县| 大悟县| 山西省| 临泽县| 桐城市| 白朗县| 丰县| 仲巴县| 桐乡市| 治多县| 民县| 楚雄市| 突泉县| 巴东县| 若羌县| 高安市| 庆城县| 青浦区| 福泉市| 西乌| 辽阳市| 阳朔县| 玛沁县| 辛集市| 新郑市|