<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網 責編:小采 時間:2020-11-27 21:57:20
        文檔

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

        D3.js(v3)+react 實現帶坐標與比例尺的散點圖 (V3版本):上篇文章給大家介紹了圓柱圖:https://www.gxlcms.com/article/160958.htm 散點圖(Scatter Chart),通常是一橫一豎兩個坐標軸,數據是一組二維坐標,分別對應兩個坐標軸,與坐標軸對應的地方打上點。由此可以猜到,需要的元素包括circle(圓)和axis
        推薦度:
        導讀D3.js(v3)+react 實現帶坐標與比例尺的散點圖 (V3版本):上篇文章給大家介紹了圓柱圖:https://www.gxlcms.com/article/160958.htm 散點圖(Scatter Chart),通常是一橫一豎兩個坐標軸,數據是一組二維坐標,分別對應兩個坐標軸,與坐標軸對應的地方打上點。由此可以猜到,需要的元素包括circle(圓)和axis

        上篇文章給大家介紹了圓柱圖:https://www.gxlcms.com/article/160958.htm

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

        //圓心數據
         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的繪制區域:

        //定義一個svg的繪制區域。
         var width = 600; //svg繪制區域的寬度
         var height = 500; //svg繪制區域的高度
        
         var svg = d3.select("#body") //選擇id為body的div
         .append("svg") //在<body>中添加<avg>
         .attr("width",width) //設定<svg>的寬度屬性
         .attr("height",height) //設定<svg>的高度屬性

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

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

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

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

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

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

        最后定義坐標軸: 

         

        //定義坐標軸
         //x軸
         var xAxis = d3.svg.axis() //創建一個默認的新坐標軸
         .scale(xScale) //設定坐標軸的比例尺
         .orient("bottom") //設定坐標軸的方向
        
         
         yScale.range([yAxisWidth,0]) //重新設置y軸比例尺的值域,與原來的相反
        
         //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)

        看一下效果圖:

         

        完整代碼:

        import React, { Component } from 'react';
        import * as d3 from 'd3'
        class ScatterChart extends Component {
         constructor(props) {
         super(props);
         this.state = {}
         }
         componentDidMount(){
         this.oneMethod()
         }
         oneMethod(){
         //圓心數據
         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的繪制區域。
         var width = 600; //svg繪制區域的寬度
         var height = 500; //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.linear() //創建一個線性比例尺
         .domain([0,1.2*d3.max(center,function(d){ //設定定義域
         return d[0]
         })])
         .range([0,xAxisWidth]) //設定值域
         //y軸比例尺
         var yScale = d3.scale.linear() //創建一個線性比例尺
         .domain([0,1.2*d3.max(center,function(d){ //設定定義域
         return d[1]
         })])
         .range([0,yAxisWidth]) //設定值域
         //在svg中繪制圖形,先繪制圓
         //外邊框
         var padding = {top:30,right:30,bottom:100,left:100};
         //繪制圓
         var circle = svg.selectAll("circle")
         .data(center) //綁定數據
         .enter() //獲取enter部分
         .append("circle") //
         .attr("fill","goldEnrod") //設置顏色
         .attr("cx",function(d){ //設置圓心的x坐標
         return padding.left + xScale(d[0])
         })
         .attr("cy",function(d){ //設置圓心的y坐標
         return height-padding.bottom-yScale(d[1])
         })
         .attr("r",5) //設置圓的半徑
         //定義坐標軸
         //x軸
         var xAxis = d3.svg.axis() //創建一個默認的新坐標軸
         .scale(xScale) //設定坐標軸的比例尺
         .orient("bottom") //設定坐標軸的方向
         yScale.range([yAxisWidth,0]) //重新設置y軸比例尺的值域,與原來的相反
         //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 ScatterChart;

        總結

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

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

        D3.js(v3)+react 實現帶坐標與比例尺的散點圖 (V3版本):上篇文章給大家介紹了圓柱圖:https://www.gxlcms.com/article/160958.htm 散點圖(Scatter Chart),通常是一橫一豎兩個坐標軸,數據是一組二維坐標,分別對應兩個坐標軸,與坐標軸對應的地方打上點。由此可以猜到,需要的元素包括circle(圓)和axis
        推薦度:
        標簽: 坐標 散點圖 d3.js
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 色偷偷噜噜噜亚洲男人| 无忧传媒视频免费观看入口| 777亚洲精品乱码久久久久久 | 免费国产午夜高清在线视频| 午夜老司机永久免费看片| 久久久久国色AV免费看图片| 亚洲av日韩av欧v在线天堂| 亚洲国产精品无码久久久不卡| 99人中文字幕亚洲区| 美景之屋4在线未删减免费| 999久久久免费精品播放| 国产精品免费看久久久无码| 久久亚洲AV无码精品色午夜 | 成人免费视频一区| 国产亚洲真人做受在线观看| 亚洲综合在线一区二区三区 | 亚洲Av无码乱码在线观看性色| 亚洲人成依人成综合网| 黄页网址在线免费观看| 亚洲免费日韩无码系列| 亚洲欧美成aⅴ人在线观看| 久久午夜伦鲁片免费无码| 亚洲男女一区二区三区| 国产乱妇高清无乱码免费| 九月婷婷亚洲综合在线| 成人无码区免费A∨直播| 国产成人免费a在线视频色戒| 窝窝影视午夜看片免费| 色视频色露露永久免费观看| 亚洲网站在线免费观看| 最近中文字幕mv手机免费高清| 无忧传媒视频免费观看入口| 久久91亚洲精品中文字幕| baoyu116.永久免费视频| 免费国产a国产片高清| 蜜桃传媒一区二区亚洲AV| 国产美女亚洲精品久久久综合| 五月天婷婷免费视频| 久久亚洲日韩精品一区二区三区| 毛片免费在线视频| a级日本高清免费看|