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

D3.js入門之比例尺的使用與繪制

 更新時(shí)間:2022年11月08日 09:49:14   作者:FinGet  
中國(guó)這么大,要在一張小小地圖上畫上中國(guó),那么就需要按一定的比例縮小。D3 可視化畫圖,也是如此。本文就來和大家聊聊D3中的比例尺的繪制與使用,感興趣的可以學(xué)習(xí)一下

中國(guó)這么大,要在一張小小地圖上畫上中國(guó),那么就需要按一定的比例縮小。D3 可視化畫圖,也是如此,例如:一個(gè)柱狀圖的最大值為10000,但是畫布最大高度只有400,那么10000就只能被映射為400,那么8000、5000...又該映射成哪個(gè)值呢?

比例尺

D3中的比例尺大概有20多種(d3.scaleLinear、d3.scalePowd3.scaleTime、d3.scaleBand等)。大體上可以分為三類:

  • 連續(xù)輸入和連續(xù)輸出
  • 連續(xù)輸入和離散輸出
  • 離散輸入和離散輸出

常用比例尺

scaleLinear 線性比例尺

const scale = d3.scaleLinear() // 連續(xù)輸入和連續(xù)輸出
.domain([0, 500]) // 輸入域 0 ~ 500
.range([0, 300]); // 輸出域 0 ~ 300

console.log(scale(100)) // 60
console.log(scale(300)) // 180
console.log(scale(500)) // 300

scaleBand 有序序數(shù)比例尺

scaleBand:有助于創(chuàng)建條形圖,同時(shí)考慮每個(gè)條形之間的間隔。域被指定為一組值(每個(gè)波段一個(gè)值),范圍為波段的最小和最大范圍(例如條形圖的總寬度)。

實(shí)際上scaleBand會(huì)將范圍拆分為n 個(gè)帶區(qū)(其中n是域數(shù)組中的值的數(shù)量),并考慮在指定間隔的情況下計(jì)算條形圖的位置和寬度。

const scale = d3.scaleBand()
  .domain([1,2,3,4])
  .range([0,100])

console.log(scale(1)) // 0
console.log(scale(3)) // 50
console.log(scale(4)) // 75

console.log(scale.bandwidth()) // 25 (100 分為4份,每份25(柱狀圖寬度))

d3.scaleTime() 時(shí)間比例尺

d3.scaleTime()類似于d3.scaleLinear()線性比例尺,只不過輸入域變成了一個(gè)時(shí)間軸。

const scale = d3.scaleTime()
  .domain([new Date(2022, 0, 1), new Date(2022, 0, 31)])
  .range([0, 30])

console.log(scale3(new Date(2022, 0, 15))) // 14

scaleOrdinal 無序序數(shù)比例尺

const scale = d3.scaleOrdinal() // 離散輸入和離散輸出
  .domain(['jack', 'rose', 'john', 'lucy'])
  .range([10, 20, 30])
console.log(scale("jack")); // 10
console.log(scale("lucy")); // 10
console.log(scale("rose")); // 20
console.log(scale("john")); // 30

console.log(scale("finget")) // 20 輸入域以外的值

const scale = d3.scaleOrdinal()
  .domain(['jack', 'rose', 'john', 'lucy'])
  .range([10, 20, 30])
  .unknown(23) // 指定未知輸入域的輸出值
console.log(scale("finget"))  // 23

如果輸入域大于輸出域,domain()的值按照順序循環(huán)依次對(duì)應(yīng)range()的值

scalePoint 點(diǎn)比例尺

// 創(chuàng)建從一組離散值映射到指定范圍內(nèi)等距的點(diǎn)
const scale = d3.scalePoint() // 離散輸入和離散輸出
  .domain(['jack', 'rose', 'john']) 
  .range([0, 100])
console.log(scale4('jack')) // 0
console.log(scale4('rose')) // 50
console.log(scale4('john')) // 100

console.log(scale4.step()) // 訪問點(diǎn)之間的距離 50

scaleThreshold 閾值比例尺

// scaleThreshold 將連續(xù)數(shù)值輸入映射到范圍定義的離散值
let scaleThreshold = d3.scaleThreshold() // 連續(xù)輸入和離散輸出
  .domain([0, 10, 20])
  .range(['small', 'medium', 'large', 'xlarge'])
console.log(scaleThreshold(5)) // medium
console.log(scaleThreshold(15)) // large
console.log(scaleThreshold(25)) // xlarge
console.log(scaleThreshold(35)) // xlarge
console.log(scaleThreshold(45)) // xxlarge

如果指定了 domain 則將比例尺的輸入范圍設(shè)置為指定的數(shù)組。數(shù)組必須是升序排序的。值通常是數(shù)值,也可以是能進(jìn)行排序的其他類型。如果輸出域的值個(gè)數(shù)為 N + 1, 則輸入域中值的個(gè)數(shù)必須為 N. 如果比 N 少則對(duì)應(yīng)的輸出域中多余的值會(huì)被忽略。如果多于 N 則會(huì)出現(xiàn)返回 undefined 的情況。如果沒指定 domain 則返回比例尺當(dāng)前的輸入域。

// invertExtent 返回輸出域中的值 value 對(duì)應(yīng)的輸入范圍
console.log(scaleThreshold.invertExtent('small')) // [Infinity, 0]
console.log(scaleThreshold.invertExtent('medium')) // [0, 10]
console.log(scaleThreshold.invertExtent('large')) // [10, 20]
console.log(scaleThreshold.invertExtent('xlarge')) // [20, Infinity]

scaleQuantize 量化比例尺

const scale = d3.scaleQuantize() // 連續(xù)輸入和離散輸出
    .domain([0, 10])
    .range(['red', 'green', 'blue', 'pink'])

console.log(scale(-1)) // red
console.log(scale(2)) // red
console.log(scale(8)) // pink
console.log(scale(20)) // pink

console.log(scale.invertExtent('red')) // [0, 2.5]
console.log(scale.invertExtent('green')) // [2.5, 5]
console.log(scale.invertExtent('blue')) // [5, 7.5]
console.log(scale.invertExtent('pink')) // [7.5, 10]

顏色比例尺

D3提供了一些顏色比例尺:點(diǎn)擊查看文檔

d3.schemeCategory10
d3.schemeAccent
d3.schemeDark2
d3.schemePaired
d3.schemePastel1
d3.schemePastel2
d3.schemeSet1
d3.schemeSet2
d3.schemeSet3

// 定義一個(gè)序數(shù)顏色比例尺
let color = d3.scaleOrdinal(d3.schemeCategory10)
console.log(color(1)) // #1f77b4

總結(jié)

本章介紹了幾種常用的比例尺,D3 還有一些比例尺可以查看官方文檔了解:

d3.scaleIdentity() // 恒等比例尺
d3.scaleSqrt() // 乘方比例尺
d3.scalePow() // 類似scaleSqrt的乘方比例尺
d3.scaleLog() // 對(duì)數(shù)比例尺
d3.scaleQuantile() // 分位數(shù)比例尺

上述的各種使用比例尺的例子都相當(dāng)于一個(gè)正序的過程,從domain的數(shù)據(jù)集映射到range數(shù)據(jù)集中,那么有沒有逆序的過程呢?D3中提供了invert()以及invertExtent()方法可以實(shí)現(xiàn)這個(gè)過程。

到此這篇關(guān)于D3.js入門之比例尺的使用與繪制的文章就介紹到這了,更多相關(guān)D3.js比例尺內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript圖像延遲加載庫Echo.js

    JavaScript圖像延遲加載庫Echo.js

    Echo 是一個(gè)獨(dú)立的 JavaScript 懶加載圖像的工具,快速、體積?。ú蛔?k)和使用 HTML5 的 data- 屬性,通過本文給大家介紹JavaScript圖像延遲加載庫Echo.js ,感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04
  • JavaScript實(shí)現(xiàn)點(diǎn)擊圖片換背景

    JavaScript實(shí)現(xiàn)點(diǎn)擊圖片換背景

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)點(diǎn)擊圖片換背景,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 微信小程序系列之自定義頂部導(dǎo)航功能

    微信小程序系列之自定義頂部導(dǎo)航功能

    這篇文章主要介紹了微信小程序系列之自定義頂部導(dǎo)航功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • javascript showModalDialog模態(tài)對(duì)話框使用說明

    javascript showModalDialog模態(tài)對(duì)話框使用說明

    使用javascript打開模態(tài)對(duì)話框,想學(xué)習(xí)showModalDialog使用方法的朋友可以參考下。
    2009-12-12
  • webpack開發(fā)跨域問題解決辦法

    webpack開發(fā)跨域問題解決辦法

    本篇文章主要介紹了webpack開發(fā)跨域問題解決辦法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • js實(shí)現(xiàn)滾動(dòng)條自動(dòng)滾動(dòng)

    js實(shí)現(xiàn)滾動(dòng)條自動(dòng)滾動(dòng)

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)滾動(dòng)條自動(dòng)滾動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • javascript實(shí)現(xiàn)圖片輪換動(dòng)作方法

    javascript實(shí)現(xiàn)圖片輪換動(dòng)作方法

    這篇文章主要介紹了javascript實(shí)現(xiàn)圖片輪換動(dòng)作方法,文章通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • JavaScript的String字符串對(duì)象常用操作總結(jié)

    JavaScript的String字符串對(duì)象常用操作總結(jié)

    String對(duì)象用于存儲(chǔ)字符串?dāng)?shù)據(jù),這里我們做了JavaScript的String字符串對(duì)象常用操作總結(jié),需要的朋友可以參考下
    2016-05-05
  • JS注冊(cè)/移除事件處理程序(ExtJS應(yīng)用程序設(shè)計(jì)實(shí)戰(zhàn))

    JS注冊(cè)/移除事件處理程序(ExtJS應(yīng)用程序設(shè)計(jì)實(shí)戰(zhàn))

    最常做的事情就是注冊(cè)事件處理程序,因?yàn)樵贓xtJS的世界里,幾乎完全由時(shí)間組成,下面是處理程序案例,感興趣的朋友可以參考下哈,希望可以幫助到你
    2013-05-05
  • SyntaxHighlighter代碼加色使用方法

    SyntaxHighlighter代碼加色使用方法

    原名:SyntaxHighlighter,是一款用于web頁面的代碼著色工具,可以用來著色多種語言,可以是HTML,CSS,Javascript,還可以是C,JAVA等編程語言。最早見于Yahoo的YUI,當(dāng)時(shí)還屬于自由軟件,最近打開官方網(wǎng)站發(fā)現(xiàn)已被goolge收編。
    2008-09-09

最新評(píng)論

大名县| 花莲县| 沐川县| 千阳县| 仙桃市| 信宜市| 万宁市| 定陶县| 博爱县| 西盟| 望谟县| 南安市| 福海县| 万州区| 利津县| 普格县| 松滋市| 阜阳市| 曲水县| 宜宾县| 化隆| 名山县| 三明市| 闻喜县| 开平市| 汝南县| 枞阳县| 凤山县| 来安县| 沅江市| 凯里市| 博野县| 芒康县| 泸西县| 囊谦县| 浏阳市| 莱西市| 玉门市| 海安县| 新沂市| 资阳市|