1. 程式人生 > >【 D3.js 入門系列 --- 3 】 做一個簡單的圖表!

【 D3.js 入門系列 --- 3 】 做一個簡單的圖表!

    轉載請註明出處,謝謝。

    前面說了幾節,都是對文字進行處理,這一節中將用 D3.js 做一個簡單的柱形圖。

    做柱形圖有很多種方法,比如用 HTML 的 div 標籤,或用 svg 。

    推薦用 SVG 來做各種圖形。SVG 意為可縮放向量圖形(Scalable Vector Graphics),SVG 使用 XML 格式定義影象,不清楚什麼是SVG的朋友請先在 w3cschools 學習下,內容很少,很快就能掌握,不需要記住各種標籤,只要知道大概是什麼就行,用的時候再查。

    先看下面的程式碼:

<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>  
<script>	
		var width = 600;
		var height = 600;
		var svg = d3.select("body").append("svg")
					   .attr("width",width)
					   .attr("height",height);
		
		var dataset = [ 30 , 20 , 45 , 12 , 21 ];
		
		svg.selectAll("rect")
		   .data(dataset)
		   .enter()
		   .append("rect")
		   .attr("x",10)
		   .attr("y",function(d,i){
				return i * 30;
		   })
		   .attr("width",function(d,i){
				return d * 10;
		   })
		   .attr("height",28)
		   .attr("fill","red");
		   
</script>

    上面程式碼的結果如下圖:


    這樣就做了一個柱形圖。分析一下上面的程式碼:

    第3-4行: 定義兩個變數,分別表示 SVG 繪製領域的寬和高。

    第5-7行: 表示選擇 body 後,在 body 裡插入 svg ,用 attr 來給 svg 新增屬性。用 attr 新增屬性的效果類似於在 HTML 中給<a>元素新增屬性 href 。

    第9行: 是要使用的資料。

    第11行: 表示在 svg 中選擇所有的 rect 元素,但是實際上這時候 svg 中還不存在 rect 元素。這是 D3 一個比較特殊的地方,即它能夠選擇一個空集

。先不要驚訝,請看第13行。

    第12行: 表示將資料繫結要這個 svg 上。

    第13行: enter 表示當所需要的元素(這裡為 rect )比繫結的資料集合的元素(這裡為 dataset )少時,自動新增位置,使得與資料集合的數量一樣多。這裡很重要

    第14行: 緊接上一行, append 元素 rect 。11-14行經常一起出現,要注意

    第15-27行: 設定 rect 元素的各項屬性,如位置,長短,顏色等。

    上面的柱形圖,對於每個柱柱都是手動設定的長度,實際運用中我們常常希望給定一個最大值,讓柱柱自動根據這個最大值調整百分比,顯示出來,怎麼辦呢?插入如下程式碼:

var wx = d3.scale.linear()
		        .domain([0,d3.max(dataset)])
                .range([0,500]);

    d3.scale.linear() 用於生成一個線性的可縮放的尺度,它的初始 domain 為 [ 0 , 1 ] ,初始 range 為 [ 0 , 1 ] , 這裡的[ ]表示的是範圍。 現在我們把 domain 設定為 [ 0 , d3.max(dataset) ] ,即0到 dataset 中的最大值。 range設定為0到500。 這表示如果資料是45,則返回500,如果是30,則返回333.333。

    接下來只要在新增 rect 時給width屬性賦值的時候換成變數 wx 即可。

svg.selectAll("rect")
		   .data(dataset)
		   .enter()
		   .append("rect")
		   .attr("x",10)
		   .attr("y",function(d,i){
				return i * 30;
		   })
		   .attr("width",wx)           //注意這裡
		   .attr("height",28)
		   .attr("fill","red");

    這樣,寬度會隨著繫結的資料自動變化。


相關推薦

D3.js 入門系列 --- 3 一個簡單圖表

    轉載請註明出處,謝謝。     前面說了幾節,都是對文字進行處理,這一節中將用 D3.js 做一個簡單的柱形圖。     做柱形圖有很多種方法,比如用 HTML 的 div 標籤,或用 svg 。     推薦用 SVG 來做各種圖形。SVG 意為可縮放

D3.js 入門系列 — 6 圖表動起來

1. 什麼是動態效果 前面幾章製作的圖表是一蹴而就地出現,然後繪製完成後不再發生變化的,這是靜態的圖表。 動態的圖表,是指圖表在某一時間段會發生某種變化,可能是形狀、顏色、位置等,而且使用者是可以看到變化的過程的。 例如,有一個圓,圓心為 (100, 100)。現在我們希

D3.js 入門系列 --- 7 理解 update, enter, exit 的使用

    轉載請註明出處,謝謝。     在前面幾節中反覆出現瞭如下程式碼: svg.selectAll("rect") .data(dataset) .enter() .append("r

D3.js 入門系列 --- 1 第一個程式HelloWorld

下面開始用D3.js處理第一個簡單問題,先看下面的程式碼:  <html> <head> <meta charset="utf-8"&g

D3.js 入門系列 --- 9 常見視覺化圖形

    轉載請註明出處,謝謝。     Layout ,直譯為“佈局,安排”。但在 D3 中不是這個意思。     D3 中有很多 Layout 函式,它們不是為了在畫面中佈局什麼,在 D3 中是對輸入的資料進行轉換,轉換成比較容易進行視覺化的資料。實際進行視覺化時,

D3.js 入門系列 --- 9.4 集群圖的制作

all users bject nodes -- 部分 函數 選擇 water 本人的個人博客為: www.ourd3js.com csdn博客為: blog.csdn.net/lzhlzz 轉載請註明出處,謝謝。

D3.js 入門系列 --- 9.6 打包圖的製作

    轉載請註明出處,謝謝。     打包圖( Pack ),用於包含與被包含的關係,也表示各個物件的權重,通常用一圓套一圓來表示前者,用圓的大小來表示後者。     這是各城市所屬關係的資料。我們現在要用 D3 的 layout 來轉換資料,使其容易進行視覺化處理

D3.js 入門系列 --- 10.2 可拖動的地圖

    轉載請註明出處,謝謝。     本節是結合9.2節 和10節 的內容製作的一個可力學導向的中國地圖,使用者可以拖動中國的各個省份。     1. 定義各函式 var projection = d3.geo.mercator() .center(

D3.js 高階系列 — 5.0 顏色

顏色是作圖不可少的概念,常用的標準有 RGB 和 HSL,D3 提供了建立顏色物件的方法,能夠相互轉換和插值。RGB色彩模式是通過對紅(Red)、綠(Green)、藍(Blue)三個顏色通道相互疊加來得到各式各樣的顏色。三個通道的值的範圍都為0~255,因此總共能表示1677

D3.js 高階系列 — 6.0 值域和顏色

在【入門 - 第 10 章】作了一張中國地圖,其中各省份的顏色值都是隨意賦值的。如果要將一些值反映在地圖上,可以利用顏色的變化來表示值的變化。1. 思路例如,有值域的範圍為:[10, 500]現希望10用淺綠表示,500用深綠表示,10到500之間的值用淺綠和深綠之間的顏色表

D3.js 入門系列2

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> &

ionic一個簡單的 card功能

今天發現ionic有一個很好看的介面,是用card做的,先貼效果圖,效果看上去還不錯~ 效果圖: 原始碼: <html ng-app="ionicApp"> <head>

js利用點選事件一個簡單的計算器

原始碼: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"&g

D3.js資料視覺化系列教程(三十)--力導向圖之帶文字

(1)連結陣列var links = [ {source: "Microsoft", target: "Amazon", type: "licensing" ,weight:1,color:1}, {source: "Microsoft", target:

D3.js資料視覺化系列教程(十六)--更新、過度和動畫

//(1) 準備資料集 var dataset = [ 5, 10, 13, 19, 21, 25, 22, 18, 15, 13, 11, 12, 15, 20, 18, 17, 16, 18, 23, 25 ]; //(2) 設定SVG的高寬 var w=600; va

D3.js 進階系列 — 4.0 繪製箭頭

在 SVG 繪製區域中作圖,在繪製直線和曲線時,常需要在某處新增箭頭。本文介紹如何在 D3 中給直線和曲線新增箭頭。 到目前為止,我們繪製 D3 的圖表都是在 SVG 繪製區域內,雖然 D3 也可用 Canvas 或 WebGL 等作圖,但 SVG 是最常用的。那麼,用 D3

D3.js 進階系列 — 2.1 力學圖的事件 + 頂點的固定

本章討論在力學圖中常用到的事件( Event ),然後對【進階 - 第 2.0 章】的人物關係圖進行改進,使使用者能夠固定拖拽的物件。 force.on("tick", function(){ });這裡的 force 是之前程式碼中定義的佈局( Layout )

D3.js 進階系列 — 1.0 CSV 表格檔案的讀取

在入門系列的教程中,我們常用 d3.json() 函式來讀取 json 格式的檔案。json 格式很強大,但對於普通使用者可能不太適合,普通使用者更喜歡的是用 Microsoft Excel 或 OpenOffice Calc 等生成的表格檔案,因為簡單易懂,容易編輯。

D3.js資料視覺化系列教程(二十二)--互動圖表之提示條

//鍵值對資料集 var dataset = [ {key:0,value:5}, {key:1,value:10}, {key:2,value:13}, {key:3,value:19}, {key:4,value:21}, {key:5,value:25}, {key:6,value:22}, {ke

D3.js 進階系列 — 1.1 其他表格檔案的讀取

CSV 表格檔案是以逗號作為單元分隔符的,其他還有以製表符 Tab 作為單元分隔符的 TSV 檔案,還有人為定義的其它分隔符的表格檔案。本文將說明在 D3 中如何讀取它們。   1. TSV 表格檔案是什麼 TSV(Tab Separated Values),製表分隔值,它