【D3.js學習總結】16、D3佈局-矩陣圖
d3.layout.treemap()
矩陣圖(Treemap)的API說明
- treemap.children – 取得或設定孩子訪問器。
- treemap.links – 計算樹節點中的父子連結。
- treemap.mode – 改變佈局的演算法。
- treemap.nodes – 計算矩形樹佈局並返回節點陣列。
- treemap.padding – 指定父子之間的間距。
- treemap.round – 啟用或者禁用四捨五入畫素值。
- treemap.size – 指定佈局的尺寸。
- treemap.sort – 控制兄弟節點的遍歷順序。
- treemap.sticky – 讓佈局對穩定的更新是粘滯的(sticky)。
- treemap.value – 取得或設定用來指定矩形樹中矩形單元尺寸的值訪問器。
- treemap – treemap.nodes的別名。
1、資料
var dataset = {
"name": "中國",
"children":
[
{
"name": "浙江",
"children":
[
{"name":"杭州", "gdp":8343},
{"name":"寧波", "gdp":7128},
{"name":"溫州", "gdp":4003},
{"name":"紹興", "gdp":3620},
{"name":"湖州", "gdp":1803},
{"name":"嘉興", "gdp":3147},
{"name":"金華", "gdp":2958},
{"name":"衢州", "gdp":1056},
{"name":"舟山", "gdp":1021},
{"name":"台州", "gdp":3153},
{"name":"麗水", "gdp":983}
]
},
{
"name": "廣東",
"children":
[
{"name":"杭州", "gdp":8343},
{"name":"寧波", "gdp":7128},
{"name":"溫州", "gdp":4003},
{"name":"紹興", "gdp":3620},
{"name":"湖州", "gdp":1803},
{"name":"嘉興", "gdp":3147},
{"name":"金華", "gdp":2958},
{"name":"衢州", "gdp":1056},
{"name":"舟山", "gdp":1021},
{"name":"台州", "gdp":3153},
{"name":"麗水", "gdp":983}
]
},
{
"name": "福建",
"children":
[
{"name":"杭州", "gdp":8343},
{"name":"寧波", "gdp":7128},
{"name":"溫州", "gdp":4003},
{"name":"紹興", "gdp":3620},
{"name":"湖州", "gdp":1803},
{"name":"嘉興", "gdp":3147},
{"name":"金華", "gdp":2958},
{"name":"衢州", "gdp":1056},
{"name":"舟山", "gdp":1021},
{"name":"台州", "gdp":3153},
{"name":"麗水", "gdp":983}
]
}
]
}
矩陣佈局用的還是標準的層級關係資料結構,name、children欄位為必須,資料值欄位可自定或用預設的value,本例中用的是gdp,所以在接下來的資料轉換中需要用value方法指定資料值欄位。
2、資料轉換
var width = 800;
var height = 500;
var treemap = d3.layout.treemap()
.size([width, height])
.value(function(d) {
return d.gdp;
});
var nodes = treemap.nodes(dataset);
var links = treemap.links(nodes);
轉換資料後,節點陣列的輸出結果如圖所示。
其中,節點物件的屬性包括:
parent:父節點
children:子節點
depth:節點的深度
value:節點的value值,由value訪問器決定
x:節點的x座標
y:節點的y座標
dx:x方向的寬度
dy:y方向的寬度
本例中將不會用到liks資料物件;
3、繪製圖形
生成SVG容器
var svg = d3.select(`body`).append(`svg`)
.attr(`width`,width)
.attr(`height`,height)
生成顏色比例尺
var color = d3.scale.category10();
為每種型別資料建立容器
var groups = svg.selectAll("g")
.data(nodes.filter(function(d) {
return !d.children;
}))
.enter()
.append("g");
為每種型別資料建立矩形圖
var rects = groups.append("rect")
.attr("class", "nodeRect")
.attr("x", function(d) {
return d.x;
})
.attr("y", function(d) {
return d.y;
})
.attr("width", function(d) {
return d.dx;
})
.attr("height", function(d) {
return d.dy;
})
.style("fill", function(d, i) {
return color(d.parent.name);
});
生成文字
var texts = groups.append("text")
.attr("class", "nodeName")
.attr("x", function(d) {
return d.x;
})
.attr("y", function(d) {
return d.y;
})
.attr("dx", "0.5em")
.attr("dy", "1.5em")
.text(function(d) {
return d.name + " " + d.gdp;
});
相關文章
- 【D3.js學習總結】12、D3佈局-叢集圖JS
- 【D3.js學習總結】26、D3地理地圖JS地圖
- 【D3.js學習總結】4、D3建立SVGJSSVG
- 【D3.js學習總結】6、D3比例尺JS
- 【D3.js學習總結】23、D3幾何-四叉樹JS
- 【D3.js學習總結】22、D3幾何-泰森多邊形JS
- d3.js 入門學習記錄(九) 用佈局實現餅圖 堆疊面積圖 矩陣樹圖 思維樹圖 封閉圖JS矩陣
- 第6章 圖的學習總結(鄰接矩陣&鄰接表)矩陣
- 矩陣快速冪總結矩陣
- flutter佈局-5-Matrix4矩陣變換Flutter矩陣
- 快速學習掌握移動Web開釋出局總結(流式佈局+flex伸縮佈局+rem佈局+Boostrap框架 )(更新中)WebFlexREM框架
- D3佈局的相關apiAPI
- 佈局總結-水平居中佈局的實現
- 三欄佈局總結
- display:table佈局總結
- 【圖片版】學習CSS網格佈局CSS
- 演算法學習:矩陣快速冪/矩陣加速演算法矩陣
- flex佈局學習Flex
- D3力導向圖使用總結
- 016 通過連結串列學習Rust之安全的雙連結串列佈局Rust
- 016 透過連結串列學習Rust之安全的雙連結串列佈局Rust
- css各種佈局總結CSS
- 【CSS】Grid 佈局總結CSS
- css佈局基礎總結CSS
- PHP 學習總結之陣列PHP陣列
- 前端BFC佈局學習前端
- 使用 d3.js 力導佈局繪製資源拓撲圖JS
- torch中向量、矩陣乘法大總結矩陣
- 向量和矩陣求導公式總結矩陣求導公式
- CSS學習-Flex佈局複習CSSFlex
- 響應式佈局方法總結
- 前端佈局總結(持續更新)前端
- AndroidUI佈局問題總結AndroidUI
- 【numpy學習筆記】矩陣操作筆記矩陣
- Flex佈局學習筆記Flex筆記
- css經典佈局學習CSS
- 資料結構學習總結--圖資料結構
- Python numpy中矩陣的用法總結Python矩陣