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

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

 更新時間:2019年05月09日 11:06:06   作者:溢楊年華  
散點圖(Scatter Chart),通常是一橫一豎兩個坐標(biāo)軸,數(shù)據(jù)是一組二維坐標(biāo),分別對應(yīng)兩個坐標(biāo)軸,與坐標(biāo)軸對應(yīng)的地方打上點。由此可以猜到,需要的元素包括circle(圓)和axis(坐標(biāo)軸),接下來通過本文大家分享D3.js(v3)+react 實現(xiàn)帶坐標(biāo)與比例尺的散點圖 (V3版本) ,一起看看

上篇文章給大家介紹了圓柱圖:http://www.fzitv.net/article/160958.htm

散點圖(Scatter Chart),通常是一橫一豎兩個坐標(biāo)軸,數(shù)據(jù)是一組二維坐標(biāo),分別對應(yīng)兩個坐標(biāo)軸,與坐標(biāo)軸對應(yīng)的地方打上點。由此可以猜到,需要的元素包括circle(圓)和axis(坐標(biāo)軸)。需要進(jìn)行可視化的數(shù)據(jù)有:

//圓心數(shù)據(jù)
 var center = [
 [0.5,0.5],[0.7,0.8],[0.4,0.9],
 [0.11,0.32],[0.88,0.25],[0.75,0.12],
 [0.5,0.1],[0.2,0.3],[0.4,0.1],[0.6,0.7]
 ]

然后定義一個SVG的繪制區(qū)域:

//定義一個svg的繪制區(qū)域。
 var width = 600; //svg繪制區(qū)域的寬度
 var height = 500; //svg繪制區(qū)域的高度

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

數(shù)組中的每一項都是一個數(shù)組,子數(shù)組的第一項表示x值,第二項表示y值。實際應(yīng)用中x軸和y軸可能對應(yīng)著不同的意義,單位也可能不同。比如人口-GDP、煙齡-肺癌率等。這些數(shù)據(jù)都不可能直接用像素作單位來繪制,因為類似(0.5,0.5)、(0.7,0.8)這樣的位置,即便繪制了也會看到圓都擠到一塊,分不清彼此。因此要先使用比例尺將它們放大。

//定義比例尺
 //x軸寬度
 var xAxisWidth = 300;
 //y軸寬度
 var yAxisWidth = 300;
 //x軸比例尺
 var xScale = d3.scale.linear()  //創(chuàng)建一個線性比例尺
  .domain([0,1.2*d3.max(center,function(d){ //設(shè)定定義域
  return d[0]
  })])
  .range([0,xAxisWidth])  //設(shè)定值域
 //y軸比例尺
 var yScale = d3.scale.linear()  //創(chuàng)建一個線性比例尺
  .domain([0,1.2*d3.max(center,function(d){ //設(shè)定定義域
  return d[1]
  })])
  .range([0,yAxisWidth])  //設(shè)定值域

 xAxisWidth和yAxisWidth可以根據(jù)需求設(shè)定。要注意,兩個比例尺都是線性比例尺,在設(shè)定定義域domain時,使用了d3.max(),這是一個求數(shù)組最大值的函數(shù)。詳情見http://www.fzitv.net/article/160968.htm對于x軸的比例尺來說,這里的意思是,相對于center數(shù)組的每一項,返回其子數(shù)組的第一項(d[0])組成一個新的數(shù)組,然后再求最大值。最大值前面乘了一個1.2,這是為了使得散點圖不會有某一點存在于坐標(biāo)軸的邊緣上。 

下面在SVG中繪制圖形,先繪制圓: 

//在svg中繪制圖形,先繪制圓
 //外邊框
 var padding = {top:30,right:30,bottom:100,left:100};
 //繪制圓
 var circle = svg.selectAll("circle")
  .data(center)  //綁定數(shù)據(jù)
  .enter()  //獲取enter部分
  .append("circle") //
  
  .attr("fill","goldEnrod") //設(shè)置顏色
  .attr("cx",function(d){ //設(shè)置圓心的x坐標(biāo)
  return padding.left + xScale(d[0])
  })
  .attr("cy",function(d){ //設(shè)置圓心的y坐標(biāo)
  return height-padding.bottom-yScale(d[1])
  })
  .attr("r",5)  //設(shè)置圓的半徑

注意上面代碼的粗體字部分,分別使用x軸和y軸的比例尺放大數(shù)據(jù)。 

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

 

//定義坐標(biāo)軸
 //x軸
 var xAxis = d3.svg.axis()  //創(chuàng)建一個默認(rèn)的新坐標(biāo)軸
  .scale(xScale)  //設(shè)定坐標(biāo)軸的比例尺
  .orient("bottom") //設(shè)定坐標(biāo)軸的方向

 
 yScale.range([yAxisWidth,0])  //重新設(shè)置y軸比例尺的值域,與原來的相反

 //y軸
 var yAxis = d3.svg.axis()  //創(chuàng)建一個默認(rèn)的新坐標(biāo)軸
  .scale(yScale)  //設(shè)定坐標(biāo)軸的比例尺
  .orient("left")  //設(shè)定坐標(biāo)軸的方向

 //添加x軸和平移
 svg.append("g")   //在svg中添加一個包含坐標(biāo)軸各元素的g元素
 .attr("class","axis")  //定義class名
 .attr("transform","translate("+padding.left+","+(height-padding.bottom)+")") //將x軸進(jìn)行平移
 .call(xAxis)  //將自身作為參數(shù)傳遞給xAxis函數(shù)
 
 //設(shè)置y軸和平移
 svg.append("g")   //在svg中添加一個包含坐標(biāo)軸各元素的g元素
 .attr("class","axis")  //定義class名
 .attr("transform","translate("+padding.left+","+(height-padding.bottom-yAxisWidth+")")) //將y軸進(jìn)行平移
 .call(yAxis)

看一下效果圖:

 

完整代碼:

import React, { Component } from 'react';
import * as d3 from 'd3'
class ScatterChart extends Component {
 constructor(props) {
 super(props);
 this.state = {}
 }
 componentDidMount(){
 this.oneMethod()
 }
 oneMethod(){
 //圓心數(shù)據(jù)
 var center = [
 [0.5,0.5],[0.7,0.8],[0.4,0.9],
 [0.11,0.32],[0.88,0.25],[0.75,0.12],
 [0.5,0.1],[0.2,0.3],[0.4,0.1],[0.6,0.7]
 ]
 //定義一個svg的繪制區(qū)域。
 var width = 600; //svg繪制區(qū)域的寬度
 var height = 500; //svg繪制區(qū)域的高度
 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軸比例尺
 var xScale = d3.scale.linear()  //創(chuàng)建一個線性比例尺
  .domain([0,1.2*d3.max(center,function(d){ //設(shè)定定義域
  return d[0]
  })])
  .range([0,xAxisWidth])  //設(shè)定值域
 //y軸比例尺
 var yScale = d3.scale.linear()  //創(chuàng)建一個線性比例尺
  .domain([0,1.2*d3.max(center,function(d){ //設(shè)定定義域
  return d[1]
  })])
  .range([0,yAxisWidth])  //設(shè)定值域
 //在svg中繪制圖形,先繪制圓
 //外邊框
 var padding = {top:30,right:30,bottom:100,left:100};
 //繪制圓
 var circle = svg.selectAll("circle")
  .data(center)  //綁定數(shù)據(jù)
  .enter()  //獲取enter部分
  .append("circle") //
  .attr("fill","goldEnrod") //設(shè)置顏色
  .attr("cx",function(d){ //設(shè)置圓心的x坐標(biāo)
  return padding.left + xScale(d[0])
  })
  .attr("cy",function(d){ //設(shè)置圓心的y坐標(biāo)
  return height-padding.bottom-yScale(d[1])
  })
  .attr("r",5)  //設(shè)置圓的半徑
 //定義坐標(biāo)軸
 //x軸
 var xAxis = d3.svg.axis()  //創(chuàng)建一個默認(rèn)的新坐標(biāo)軸
  .scale(xScale)  //設(shè)定坐標(biāo)軸的比例尺
  .orient("bottom") //設(shè)定坐標(biāo)軸的方向
 yScale.range([yAxisWidth,0])  //重新設(shè)置y軸比例尺的值域,與原來的相反
 //y軸
 var yAxis = d3.svg.axis()  //創(chuàng)建一個默認(rèn)的新坐標(biāo)軸
  .scale(yScale)  //設(shè)定坐標(biāo)軸的比例尺
  .orient("left")  //設(shè)定坐標(biāo)軸的方向
 //添加x軸和平移
 svg.append("g")   //在svg中添加一個包含坐標(biāo)軸各元素的g元素
 .attr("class","axis")  //定義class名
 .attr("transform","translate("+padding.left+","+(height-padding.bottom)+")") //將x軸進(jìn)行平移
 .call(xAxis)  //將自身作為參數(shù)傳遞給xAxis函數(shù)
 //設(shè)置y軸和平移
 svg.append("g")   //在svg中添加一個包含坐標(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 ScatterChart;

總結(jié)

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

相關(guān)文章

  • react使用useState修改對象或者數(shù)組的值無法改變視圖的問題

    react使用useState修改對象或者數(shù)組的值無法改變視圖的問題

    這篇文章主要介紹了react使用useState修改對象或者數(shù)組的值無法改變視圖的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 詳解React中共享組件邏輯的三種方式

    詳解React中共享組件邏輯的三種方式

    這篇文章主要介紹了詳解React中共享組件邏輯的三種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 淺談React底層實現(xiàn)原理

    淺談React底層實現(xiàn)原理

    本文主要介紹了淺談React底層實現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 手把手教您實現(xiàn)react異步加載高階組件

    手把手教您實現(xiàn)react異步加載高階組件

    這篇文章主要介紹了手把手教您實現(xiàn)react異步加載高階組件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • React之錯誤邊界 Error Boundaries示例詳解

    React之錯誤邊界 Error Boundaries示例詳解

    這篇文章主要為大家介紹了React之錯誤邊界Error Boundaries示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • React函數(shù)組件和類組件的區(qū)別及說明

    React函數(shù)組件和類組件的區(qū)別及說明

    這篇文章主要介紹了React函數(shù)組件和類組件的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 使用react-native-image-viewer實現(xiàn)大圖預(yù)覽

    使用react-native-image-viewer實現(xiàn)大圖預(yù)覽

    這篇文章主要介紹了使用react-native-image-viewer實現(xiàn)大圖預(yù)覽,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • react-router?v6實現(xiàn)動態(tài)路由實例

    react-router?v6實現(xiàn)動態(tài)路由實例

    這篇文章主要為大家介紹了react-router?v6實現(xiàn)動態(tài)路由實例詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • React實現(xiàn)雙滑塊交叉滑動

    React實現(xiàn)雙滑塊交叉滑動

    這篇文章主要為大家詳細(xì)介紹了React實現(xiàn)雙滑塊交叉滑動,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 使用React-Window實現(xiàn)虛擬滾動效果的示例代碼

    使用React-Window實現(xiàn)虛擬滾動效果的示例代碼

    React-Window?是一個為?React?應(yīng)用程序中高效渲染大數(shù)據(jù)集而設(shè)計的庫,它基于窗口化或虛擬化的原則運行,本文將使用React-Window實現(xiàn)虛擬滾動效果,感興趣的可以了解下
    2024-01-01

最新評論

温泉县| 曲水县| 临汾市| 宿迁市| 抚顺县| 大竹县| 庆安县| 宁津县| 措美县| 扬州市| 富宁县| 浏阳市| 策勒县| 宁安市| 宜宾市| 六枝特区| 宜州市| 神木县| 长顺县| 长春市| 霞浦县| 当阳市| 怀远县| 扬中市| 葵青区| 乡宁县| 施甸县| 北安市| 甘肃省| 繁昌县| 疏附县| 登封市| 吉安市| 清流县| 玛多县| 宁明县| 乌兰县| 长春市| 大新县| 宣威市| 连南|