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

D3.js實(shí)現(xiàn)繪制和弦圖的教程詳解

 更新時間:2022年11月16日 08:45:19   作者:FinGet  
弦圖,是一種表示實(shí)體之間相互關(guān)系的圖形方法。這篇文章主要為大家詳細(xì)介紹了如何通過D3.js實(shí)現(xiàn)繪制和弦圖,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)D3.js有一定的幫助,需要的可以參考一下

弦圖,是一種表示實(shí)體之間相互關(guān)系的圖形方法。直觀的看,弦圖由節(jié)點(diǎn)分段和弧形的邊構(gòu)成。節(jié)點(diǎn)分段沿圓周排列,節(jié)點(diǎn)之間的關(guān)系通過使用弧線或貝塞爾曲線相互連接。值得注意的是,這些弧線是有寬度的,且起止寬度可以不一樣。這本質(zhì)上是因?yàn)椋【€的寬度反映了一種矩陣關(guān)系(例如A[1,2]=3,A[2,1]=4),因此取值是雙向的。——圖之典

d3.chord

const population = [
    [1000, 3045, 4567, 1234, 3714],
    [3214, 2000, 2060, 124, 3234],
    [8761, 6545, 3000, 8045, 647],
    [3211, 1067, 3214, 4000, 1006],
    [2146, 1034, 6745, 4764, 5000]
];

const chords = d3.chord()(population);
console.log(chords);

chord ( matrix )的返回值是一個chords數(shù)組,其中每個 chord 代表兩個節(jié)點(diǎn)i和j之間的組合雙向流(其中i可能等于j)并且是具有以下屬性的對象:

  • source- 該弦的源子分組對象
  • target- 該弦的目標(biāo)子分組對象

每個源和目標(biāo)子組也是具有以下屬性的對象:

  • startAngle- 以弧度為單位的起始角度
  • endAngle- 以弧度表示的結(jié)束角度
  • value- 流量值矩陣[ i ] [ j ]
  • index- 節(jié)點(diǎn)索引i

d3.chord還有一些屬性:

  • padAngle - 設(shè)置或獲取相鄰分組之間的間隔,默認(rèn)為 0
  • sortChords - 設(shè)置或獲取弦的排序規(guī)則
  • sortGroups - 設(shè)置或獲取分組的排序規(guī)則
  • sortSubGroups - 設(shè)置獲取子分組的排序規(guī)則

和弦圖由兩部分組成:分組的環(huán)形圖+表示流量的弦圖,d3.chord返回的數(shù)據(jù)就是弦數(shù)據(jù),通常傳遞給d3.ribbon來顯示相互之間的流量關(guān)系,弦圖數(shù)組也包含了另一個表示分組的屬性chords.groups,表示計(jì)算后的分組數(shù)組,分組包含以下屬性:

  • startAngle - 起始角度
  • endAngle - 終止角度
  • value - 從節(jié)點(diǎn) i 出去的總量
  • index - 節(jié)點(diǎn)索引 i

分組數(shù)據(jù)傳遞給d3.arc來繪制。

弦數(shù)據(jù)分組數(shù)據(jù)就組成了一個完整的和弦圖。

d3.ribbon

const ribbon = d3.ribbon();
ribbon({
  source: {startAngle: 0.7524114, endAngle: 1.1212972, radius: 240},
  target: {startAngle: 1.8617078, endAngle: 1.9842927, radius: 240}
}); 
// "M164.0162810494058,-175.21032946354026A240,240,0,0,1,216.1595644740915,-104.28347273835429Q0,0,229.9158815306728,68.8381247563705A240,240,0,0,1,219.77316791012538,96.43523560788266Q0,0,164.0162810494058,-175.21032946354026Z"

從示例我們可以看到,ribbon通過傳入的數(shù)據(jù)sourcetarget就可以幫我們生成一個path路徑,有了路徑就可以輕松的繪制弦圖了。

const ribbon = d3.ribbon()
.radius(100); // 指定半徑大小

chordG.selectAll("path")
    .data(chords)
    .enter()
    .append("path")
    .attr("fill", function (d, i) {
    return color(i);
    })
    .attr("d", ribbon);

繪制分組環(huán)形圖

通過chrods.groups數(shù)據(jù),加上d3.arc就可以輕易的繪制出環(huán)形圖了,這里和D3(v7)入門七:餅圖、環(huán)圖、玫瑰圖,不清楚的可以回顧一下。

//創(chuàng)建繪制器
const arc = d3.arc().innerRadius(100).outerRadius(130);
//繪制
groupG.selectAll("path")
    .data(chords.groups)
    .enter()
    .append("path")
    .attr("fill", function (d, i) {
    return color(i);
    })
    .attr("d", arc);

總結(jié)

完成的示例,可以點(diǎn)擊查看Demo!

寫到這章,我們可以更清晰的理解一下D3這個庫所做的事——窺一斑而知全豹

對于折線圖、柱狀圖這類簡單圖形,他提供比例尺、坐標(biāo)軸、以及d3.line,d3.area幫我們生成復(fù)雜的path路徑。

對于餅圖、環(huán)圖、弦圖他提供了成對的方法: d3.pied3.arc,d3.chordd3.ribbon。

核心就是處理數(shù)據(jù)通過數(shù)據(jù)生成path 路徑,給用戶最簡單的方式來繪制圖表,可以聯(lián)想到后面會介紹到的力向?qū)D、地圖、樹圖都是這般操作。D3幫我們解決了最大的問題:處理數(shù)據(jù)生成關(guān)聯(lián)性,通過數(shù)據(jù)再生成path路徑,就像一個工程車間,我們只需要給原料(數(shù)據(jù)),最后就能得到成品(圖形數(shù)據(jù)),最后怎么包裝(繪制)就由用戶自己控制。

到此這篇關(guān)于D3.js實(shí)現(xiàn)繪制和弦圖的教程詳解的文章就介紹到這了,更多相關(guān)D3.js繪制和弦圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ES11屢試不爽的新特性,你用上了幾個

    ES11屢試不爽的新特性,你用上了幾個

    這篇文章主要介紹了ES11屢試不爽的新特性,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • js實(shí)現(xiàn)兼容PC端和移動端滑塊拖動選擇數(shù)字效果

    js實(shí)現(xiàn)兼容PC端和移動端滑塊拖動選擇數(shù)字效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)兼容PC端和移動端滑塊拖動選擇數(shù)字的效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • javascript實(shí)現(xiàn)倒計(jì)時跳轉(zhuǎn)頁面

    javascript實(shí)現(xiàn)倒計(jì)時跳轉(zhuǎn)頁面

    本文給大家介紹了如何使用javascript實(shí)現(xiàn)倒計(jì)時跳轉(zhuǎn)到其他頁面的方法以及實(shí)現(xiàn)原理,非常的簡單實(shí)用,有需要的小伙伴可以參考下。
    2016-01-01
  • 微信小程序?qū)崿F(xiàn)上傳word、txt、Excel、PPT等文件功能

    微信小程序?qū)崿F(xiàn)上傳word、txt、Excel、PPT等文件功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)上傳word、txt、Excel、PPT等文件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 使用D3.js制作圖表詳解

    使用D3.js制作圖表詳解

    D3是目前最流行的JavaScript可視化圖表庫之一,D3的圖表類型非常豐富,并且支持SVG格式,因此應(yīng)用十分廣泛,也有很多圖表插件基于D3開發(fā),比如MetricsGraphics.js,在D3上構(gòu)建的數(shù)據(jù)圖表非常強(qiáng)大。
    2017-08-08
  • uniapp頁面?zhèn)鲄⒌娜N方式實(shí)例總結(jié)

    uniapp頁面?zhèn)鲄⒌娜N方式實(shí)例總結(jié)

    在進(jìn)行頁面的跳轉(zhuǎn)的時候,往往需要我們將一些參數(shù)攜帶著傳遞過去這里的class樣式,下面這篇文章主要給大家介紹了關(guān)于uniapp頁面?zhèn)鲄⒌娜N方式,需要的朋友可以參考下
    2022-11-11
  • 幫你徹底搞懂JS中的prototype、__proto__與constructor(圖解)

    幫你徹底搞懂JS中的prototype、__proto__與constructor(圖解)

    這篇文章主要介紹了詳解幫你徹底搞懂JS中的prototype、__proto__與constructor(圖解),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • ESLint詳解及在WebStorm中的應(yīng)用步驟

    ESLint詳解及在WebStorm中的應(yīng)用步驟

    ESLint是一種JavaScript代碼檢查工具,開發(fā)者可以通過自定義規(guī)則進(jìn)行代碼風(fēng)格和質(zhì)量的控制,使用ESLint的過程包括安裝、初始化配置、配置規(guī)則、運(yùn)行ESLint檢查代碼、與編輯器集成,以及與構(gòu)建工具集成等,需要的朋友可以參考下
    2024-09-09
  • 用js實(shí)現(xiàn)博客打賞功能

    用js實(shí)現(xiàn)博客打賞功能

    經(jīng)常在一些博客中看到有一個打賞功能,本篇文章主要介紹了博客打賞功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2016-10-10
  • JavaScript使用箭頭函數(shù)實(shí)現(xiàn)優(yōu)化代碼

    JavaScript使用箭頭函數(shù)實(shí)現(xiàn)優(yōu)化代碼

    在JavaScript的編程世界里,我們時常被普通函數(shù)的冗長寫法所困擾,每次都需要寫function關(guān)鍵字,有時候還要明確地寫return語句,下面我們就來看看如何利用箭頭函數(shù)優(yōu)化這些繁瑣的代碼吧
    2023-11-11

最新評論

霍林郭勒市| 赫章县| 合水县| 岳西县| 娄底市| 澳门| 抚顺县| 建水县| 泾阳县| 沁源县| 濮阳市| 阳东县| 铜梁县| 隆子县| 玛曲县| 皮山县| 洛浦县| 类乌齐县| 旬阳县| 长武县| 东源县| 伊川县| 绥棱县| 河北区| 清远市| 苏州市| 嘉峪关市| 从化市| 吉林市| 庆城县| 南乐县| 项城市| 德江县| 阿荣旗| 凤山县| 巴林右旗| 理塘县| 句容市| 云龙县| 磴口县| 江油市|