亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 11:37:00
字體:
來源:轉載
供稿:網友

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

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

首先定義柱形圖的數據、繪圖區域的寬高、和上下左右的邊距:

var width = 600;        //SVG繪制區域的寬度  var height = 500;        //SVG繪制區域的高度  //定義數據  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軸比例尺(序數比例尺)  var xScale = d3.scale.ordinal()     //構建一個序數比例尺     .domain(d3.range(dataList.length)) //設定定義域     .rangeRoundBands([0,xAxisWidth],0.2)//代替range()設定值域,并將結果取整  //y軸比例尺(線性比例尺)  var yScale = d3.scale.linear()     //創建一個線性比例尺     .domain([0,d3.max(dataList)])  //設定定義域     .range([0,yAxisWidth])    //設定值域

然后添加矩形:

//添加矩形   svg.selectAll("rect")     .data(dataList)      //綁定數據     .enter()       //獲取enter部分     .append("rect")      //添加rect元素,使其與綁定數組的長度一致     .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)      //綁定數據     .enter()       //獲取enter部分     .append("text")      //添加text元素,使其與綁定數組的長度一致     .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){     //文字內容      return d     })

最后定義坐標軸:

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

大家看一下效果圖:

完整代碼:

import React, { Component } from 'react';import * as d3 from 'd3'; //引入d3class Bar extends Component { constructor(props) {  super(props);  this.state = {} } componentDidMount(){   //將方法在componentDidMount生命周期鉤子函數中面調用  this.oneMethod() } oneMethod(){  var width = 600;        //SVG繪制區域的寬度  var height = 500;        //SVG繪制區域的高度  //定義數據  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軸比例尺(序數比例尺)  var xScale = d3.scale.ordinal()     //構建一個序數比例尺     .domain(d3.range(dataList.length)) //設定定義域     .rangeRoundBands([0,xAxisWidth],0.2)//代替range()設定值域,并將結果取整  //y軸比例尺(線性比例尺)  var yScale = d3.scale.linear()     //創建一個線性比例尺     .domain([0,d3.max(dataList)])  //設定定義域     .range([0,yAxisWidth])    //設定值域  //添加矩形   svg.selectAll("rect")     .data(dataList)      //綁定數據     .enter()       //獲取enter部分     .append("rect")      //添加rect元素,使其與綁定數組的長度一致     .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)      //綁定數據     .enter()       //獲取enter部分     .append("text")      //添加text元素,使其與綁定數組的長度一致     .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){     //文字內容      return d     })  //定義坐標軸  //x軸  var xAxis = d3.svg.axis()      //創建一個默認的新坐標軸           .scale(xScale)      //設定坐標軸的比例尺     .orient("bottom")     //設定坐標軸的方向  //重新設置y軸比例尺的值域,與原來的相反  yScale.range([yAxisWidth,0])  //y軸  var yAxis = d3.svg.axis()      //創建一個默認的新坐標軸      .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)        //將自身作為參數傳遞給xAxis函數  //添加y軸和平移  svg.append("g")         //在svg中添加一個包含坐標軸各元素的g元素   .attr("class","axis")      //定義class名   .attr("transform","translate("+padding.left+","+(height-padding.bottom-yAxisWidth)+")") //將y軸進行平移   .call(yAxis)        //將自身作為參數傳遞給yAxis函數 }  render() {  return (   <div id="body" >   </div>  ); }}export default Bar;

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产美女久久精品| 青青草成人在线| 日韩视频精品在线| 欧美日韩国产精品专区| 国产精品久久久久久久天堂| 国产九九精品视频| 亚洲女人天堂网| 久久久久国色av免费观看性色| 久久久久久久爱| xvideos国产精品| 色一区av在线| 日韩av色综合| 亚洲人精选亚洲人成在线| 国产日韩欧美日韩大片| 4k岛国日韩精品**专区| 日韩在线观看网站| 2019av中文字幕| 国产精品免费网站| 亚洲色图激情小说| 亚洲人成亚洲人成在线观看| 欧美激情综合色综合啪啪五月| 国产一区二区日韩精品欧美精品| 亚洲国产精品va在看黑人| 日韩激情片免费| 亚洲bt天天射| 色偷偷91综合久久噜噜| 国产精品久久久久久久久久新婚| 午夜免费日韩视频| 欧美二区在线播放| 亚洲高清免费观看高清完整版| 欧美大片va欧美在线播放| 欧美大尺度在线观看| 日韩精品极品在线观看播放免费视频| 91人人爽人人爽人人精88v| 一个色综合导航| 中文字幕精品在线| 欧美激情亚洲一区| 久久国产精品久久国产精品| 成人网中文字幕| 亚洲美女在线看| 91亚洲va在线va天堂va国| 久久91精品国产91久久跳| 中文字幕亚洲综合| 国产免费观看久久黄| 亚洲网在线观看| 亚洲综合社区网| 欧美国产激情18| 国产午夜精品视频免费不卡69堂| 国产精品夜色7777狼人| 国产亚洲一区精品| 欧美专区在线播放| 97在线看免费观看视频在线观看| 97国产精品人人爽人人做| 日韩在线免费视频观看| 91精品视频免费看| 欧美日韩免费网站| 国产91精品最新在线播放| 精品magnet| 日韩欧美在线视频观看| 亚洲精品wwww| 国产精品99久久久久久人| 亚洲第一精品夜夜躁人人躁| 亚洲精品mp4| 久久精品电影网站| 久久99青青精品免费观看| 欧美日韩另类视频| 欧美性猛交视频| 成人免费观看49www在线观看| 欧美在线观看网站| 久久91精品国产91久久久| 欧美孕妇性xx| 国产欧美日韩精品丝袜高跟鞋| 欧美孕妇与黑人孕交| 插插插亚洲综合网| 国产精品高潮呻吟久久av野狼| 欧美激情一区二区三区成人| 亚洲欧美国产精品| 久久视频免费在线播放| 久久成人精品视频| 日韩**中文字幕毛片| 国产精品视频99| 精品国产鲁一鲁一区二区张丽| 亚洲国产小视频在线观看| 国产精品视频最多的网站| 黄色成人在线免费| 久久精品一偷一偷国产| 精品久久国产精品| 精品国产成人av| 精品亚洲永久免费精品| 欧美性黄网官网| 68精品国产免费久久久久久婷婷| 91久久久久久久| 日韩国产欧美精品一区二区三区| 另类天堂视频在线观看| 国产精品一区二区久久久久| 九九热在线精品视频| 欧美日韩国产二区| 欧美日韩黄色大片| 亚洲午夜激情免费视频| 久久成人免费视频| 亚洲xxxx妇黄裸体| 欧美精品激情在线| 91精品国产综合久久香蕉的用户体验| 欧美一区视频在线| 日本亚洲欧美成人| 视频在线一区二区| 日本亚洲欧美成人| 午夜免费在线观看精品视频| 国产精品96久久久久久又黄又硬| 91国产精品电影| 欧美中文字幕精品| 国产视频一区在线| 成人av资源在线播放| 国产剧情久久久久久| 欧美成人精品一区二区| 日韩av在线不卡| 日韩av在线免播放器| 亚洲欧美激情视频| 欧美性极品xxxx做受| 97av在线视频免费播放| 亚洲欧美999| 亚洲综合小说区| 91久久精品在线| 日韩有码在线观看| 98精品在线视频| 亚洲精品免费在线视频| 91av在线播放| 国产91在线视频| 亚洲性视频网站| 亚洲日韩欧美视频一区| 91精品在线国产| 这里只有精品丝袜| 欧美一区亚洲一区| 成人网在线免费看| 欧美中文在线观看| 亚洲电影av在线| 国产精品99久久久久久www| 国产精品专区h在线观看| 亚洲成年人在线播放| 91久久久国产精品| 日韩av中文字幕在线| 日本不卡高字幕在线2019| 亚洲高清福利视频| 国产精品久久久久999| 成人午夜激情免费视频| 性欧美在线看片a免费观看| 亚洲精品不卡在线| 日韩美女激情视频| 欧美成人高清视频| 91精品一区二区| 中文字幕亚洲国产| 欧美日韩色婷婷| 国产精品99久久久久久白浆小说| 精品国内产的精品视频在线观看| 久久成年人免费电影| 91精品久久久久久久久久久久久久| 在线播放国产精品| 麻豆成人在线看| 国产精品福利观看| 91色琪琪电影亚洲精品久久| 亚洲精品天天看| 色婷婷亚洲mv天堂mv在影片| 91亚洲一区精品| 亚洲国产小视频在线观看|