D3.js的v5版本入門教程(第十三章)—— 餅狀圖
D3.js的v5版本入門教程(第十三章)
這一章我們來繪製一個簡單的餅狀圖,我們只繪製構成餅狀圖基本的元素——扇形、文字,從這一章開始,內容可能有點難理解,因為每一章都會引入比較多的難理解知識點,在這裡作者本人也只是粗略的講解每個新知識點的意思!如果不是很理解的話,需要讀者自行檢視官網API
為了繪製一個餅狀圖,我們還是需要以下新的知識點
- d3.arc( {} ),弧形生成器,用以繪製弧形,需要傳入一些用以繪製弧形基本的資料的物件,例如,該物件的屬性可以包括(我用官網api的示例)
- d3.pie(),餅狀圖生成器,用以產生繪製一個弧的必須的資料的物件(利用原始資料產生新的資料),使用方式:d3.pie(data)
- d3.arc().centroid(),這裡使用官方api的解釋,通過下面這張圖,這句程式碼的意思一目瞭然
- d3.schemeCategory10,使用官方API示例,可以看出,這段程式碼表示一些離散的色彩
有了上面的基本知識後(如果你理解了),接下來的繪製過程就簡單了
1、資料準備
var marge = {top:60,bottom:60,left:60,right:60} var svg = d3.select("svg") var width = svg.attr("width") var height = svg.attr("height") var g = svg.append("g") .attr("transform","translate("+marge.top+","+marge.left+")"); var dataset = [ 30 , 10 , 43 , 55 , 13 ];//需要將這些資料變成餅狀圖的資料
2、設定一個顏色比例尺
//設定一個color的顏色比例尺,為了讓不同的扇形呈現不同的顏色
var colorScale = d3.scaleOrdinal()
.domain(d3.range(dataset.length))
.range(d3.schemeCategory10);
3、新建一個餅狀圖
//新建一個餅狀圖
var pie = d3.pie();
4、新建一個弧形生成器
//新建一個弧形生成器 var innerRadius = 0;//內半徑 var outerRadius = 100;//外半徑 var arc_generator = d3.arc() .innerRadius(0) .outerRadius(100);
5、利用餅狀圖生成器轉換資料
//將原始資料變成可以繪製餅狀圖的資料,
var pieData = pie(dataset);
//在瀏覽器的控制檯列印pieData
console.log(pieData);
控制檯輸出的結果:
可以看到,資料的格式已經成功轉換,已經是可以畫弧的資料了
6、開始繪製,老規矩,先為每一個扇形及其對應的文字建立一個分組<g>
ar gs = g.selectAll(".g")
.data(pieData)
.enter()
.append("g")
.attr("transform","translate("+width/2+","+height/2+")")//位置資訊
7、繪製扇形
//繪製餅狀圖的各個扇形
gs.append("path")
.attr("d",function(d){
return arc_generator(d);//往弧形生成器中出入資料
})
.attr("fill",function(d,i){
return colorScale(i);//設定顏色
});
程式碼說明:
-arc_generator(d);//往弧形生成器中出入資料,由官方API的示例可知(我已經在本章開頭截了圖),弧形生成器所需要傳入的資料就是餅狀圖生成器返回的資料
8、文字
//繪製餅狀圖上面的文字資訊
gs.append("text")
.attr("transform",function(d){//位置設在中心處
return "translate("+arc_generator.centroid(d)+")";
})
.attr("text-anchor","middle")
.text(function(d){
return d.data;
})
注意:這裡的文字獲取需要 用到d.data,我們可以根據在控制檯輸出的資料格式可以知道,因為在轉換資料後,新資料的data域才是原始資料
最後,整個程式碼的允許結果
雖然過程很艱難,但是結果還是很不錯的,如果理解了,其實也還是很簡單的,所以多多看官網API+百度(spoiler alert:後面章節的繪圖效果更棒)
(翻外篇)d3.js在網頁端視覺化neo4j圖資料庫
為了讓大家更好的學習d3.js,“d3.js在網頁端視覺化neo4j圖資料庫”這是一個比較綜合的專案——利用neo4j的java驅動API從neo4j中取資料,並利用d3.js在網頁端進行視覺化。大家在學完基礎課程後可以做一下這個專案,進行鞏固。點選下面連結進行檢視:d3.js視覺化neo4j圖資料庫專案專欄