メインコンテンツに移動

メインナビゲーション

  • ホーム
  • サイトマップ
  • ビデオ
  • ご連絡

パンくず

  • ホーム
  • d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング

d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

d3.js

データセットの日付/時間のフォーマットがチャートで表示するフォーマットが違うことが多い

  • 時系列のデータセットにある日付/時間のフォーマットがデータ抽出ロジックに左右され、いろいろなフォーマットがあります
    // 例:時系列のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;

     

  • 実際にチャートの軸の日付フォーマットがデータセットのものと違うことが多いです
    d3.jsのデータセットの日付フォーマットがチャートと違うことが多い

d3-time-formatモジュールが日付フォーマット変換に関する様々な機能を提供しています

  • 日付、曜日、時間などのフォーマット定義関数: d3.timeFormat()
    var formatTime = d3.timeFormat("%Y-%-m-%e");
    formatTime(new Date); // "2017-10-25"

    「%」記号で日付、時間のフォーマットを決める

  • 日付、曜日、時間などフォーマット変換: d3.timeParse()
    var parseTime = d3.timeParse("%Y-%m-%e");
    parseTime("2017-10-25"); // Sun Oct 25 2015 00:00:00 GMT+0900 (Japan Standard Time)

     

  • 日付/時間関連のフォーマット一覧
    • %a - 曜日の略称
    • %A - 曜日の全称
    • %b - 月の略称
    • %B - 月の全称
    • %c - ローカル環境の日付と時間、例:10/25/2017, 9:41:57 PM
    • %d - ゼロ付きの日、月の数字 [01,31].
    • %e - 空白付きの日、月の数字 [ 1,31];  %_d と同じ.
    • %f - マイクロ秒の数字 [000000, 999999].
    • %H - 24時間制の時間 [00,23].
    • %I - 12時間制の時間 [01,12].
    • %j - 一年間にその日の番号 [001,366].
    • %m - 月に数字 [01,12].
    • %M - 分の数字 [00,59].
    • %L - ミニ秒の数字 [000, 999].
    • %p - AM or PM.
    • %Q - UNIXのマイクロ秒
    • %s - UNIXの秒
    • %S - 秒の数字 [00,61].
    • %u - 月曜日スタート (ISO 8601) の曜日番号 [1,7].
    • %w - 日曜日スタートの曜日番号 [0,6].
    • %U - 一年に日曜日スタートの曜日番号 [00,53].
    • %W - 一年に月曜日スタートの曜日番号 [00,53].
    • %V - ISO 8601 基準の一年に曜日の番号 [01, 53].
    • %x - ローカル環境の日付 (%-m/%-d/%Y と同じ) 
    • %X - ローカル環境の時間( %-I:%M:%S %p と同じ)
    • %y - 2桁年の数字 [00,99].
    • %Y - 4桁年の数字
    • %Z - タイムゾーン(例: -0700, -07:00, -07, or Z.)
    • %% - %記号のエスケープ

時系列の軸がスケール(d3.scaleTime)に日付フォーマットの使用

  • 時系列の軸(d3.axis)に、d3.scaleTime()をよく利用します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    // データセットの日付フォーマット変換
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){    // 標準日付に変換して、新しい配列作成 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    // 時系列のスケール(scaleTime)利用
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
    // 時系列の軸が時系列のスケールを呼び出し
    d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")) // 例:1/1、1/2 のフォーマット

     

  • 上記例では、データセットの日付を標準日付へ、軸の目盛フォーマットへの変換(つまり、標準の日付がなければ、軸の目盛の日付フォーマット変換はできません)
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

表示データを定義します(例:配列)

  • d3.jsで扱う可能なデータタイプ:配列、JSON、csv、tsvなどがあります
  • ここで、例として配列のデータを使用します(三つのテキストを表示)
    var dataset = ["aaa", "bbb", "ccc"] ;

     

  • d3.jsバージョン4を使用し、描画はsvgを使用します
    <script src="https://d3js.org/d3.v4.js"></script>
    <svg id="content"> </svg>

     

表示データ分のHTMLエレメントが作成され、データをエレメントに埋め込まれる

  • d3.jsのセレクト(select)がjQueryと似ているので、理解しやすいです。
  • d3.jsのセレクション(selectAll)が独自な構造を持っています
    • HTMLに存在しないエレメントを選択できます
    • 選択したエレメントに表示データをセットし、enterメソッドで新しいエレメントが作成されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset ) // データセット
      	.enter()   // 作成するエレメントへのjoin
      	.append("text")  //エレメントの新規作成

       

    • 埋め込まれたデータが自作したコールバック関数( function(d, i){ return d ; } ; d:埋め込まれたデータ、i: データ配列の順番)より呼び出されます
      var dataset = ["aaa", "bbb", "ccc"] ;
      
      d3.select("#content")
      	.selectAll("text")
      	.data( dataset )
      	.enter()
      	.append("text")
      	.attr("x", function(d,i){ return i* 60 })  // コールバック関数でx座標計算
      	.attr("y", 20)
      	.text(function(d,i){ return d }) // コールバック関数でテキスト表示
        ;
        

       

  • データのセット、新しいエレメントの作成、描画の一連は以下のようなイメージ
    d3.jsが表示データより新しいエレメントを作成
  • 描画結果は以下のようです

新規作成されたエレメントに埋め込まれたデータの確認

  • d3.jsに新規作成されたエレメントに表示データがプロパティ(__data__)に埋め込まれます
  • 作成されたエレメントをコンソールに出力して、データ構造の確認ができます
    var dataset = ["aaa", "bbb", "ccc"] ;
    
    // 作成したエレメントをtext_elesに
    var text_eles = d3.select("#content")
    	.selectAll("text")
    	.data( dataset )
     	.enter() 
    	.append( 'text' ) ;
    
    // 作成されたエレメントをコンソールに
    console.( text_eles ) ;

     

    • 出力されたデータに作成されたエレメント(三つのtextが現れます)
    • 各データのプロパティを確認すると、__data__に表示データが埋め込まれています
      新規作成されたエレメントに表示データが埋め込まれた
html
d3.js

d3.jsがデータより新規描画エレメント作成

  • d3.jsがデータ可視化ツールと言われています。それは入力より描画エレメントを作成したり、動作を制御するライブラリです
  • 入力データより新規描画エレメント作成について「d3.jsの基本1:表示するデータをHTMLのエレメントに埋め込み/表示過程」 をご参考
  • 新規エレメント作成するにはd3.data()がよく利用されますが、d3.datum()もあります
  • data()、datum()は別物で、コーティングルールとエレメント作成結果などが違いいます

d3.data()が複数のエレメント作成に対して、d3.datum()は単一のエレメントしか作成しません

  • d3.data()が複数のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.data(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;

     

  • d3.datum()が単一のエレメント作成
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.datum(data)
    	.append("g")
    	.attr("id", "g-0" )
      ;

     

  • d3.datum()を使用するときに、selectAll()、enter()などのメソッドの使用はできません
    var data = [10, 20, 100];
    
    var g = d3.select("#content")
    	.selectAll("g")
    	.datum(data)
    	.enter()
    	.append("g")
    	.attr("id", function(d,i){return "g-"+i ;})
      ;
    // 結果は何のエレメントが作成されない

     

d3.data()が作成された複数のエレメントに単一のデータ値をバインディング、d3.datum()が作成した単一のエレメントに全データをバインディング

  • 作成したエレメントにバインディングされたデータをコンソールに出力して確認ができます
    •  console.log(document.getElementById("g-0").__data__);
  • d3.data()で作成したエレメント、データバインディング状況は以下となります
    d3.dataのエレメント作成とデータバインディングの状況
  • d3.datum()で作成したエレメント、データバインディング状況は以下となります
    d3.datum()で作成したエレメント、データバインディング状況

 

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

html
d3.js

d3.jsのSVGの折れ線チャートを作成

  • d3.jsで簡単に折れ線チャート作成ができます
    d3.jsでSVGの折れ線チャート描画

ポイント1:d3.line()でデータセットをSVGのpathプロパティ(d)への変換

  • d3.jsにd3.line関数があります。d3.lineよりデータセットから直接にSVG描画のpathのプロパティ(d)への変換ができます
    // 折れ線チャート描画のデータセット
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    // SVGのpathプロパティ(d)への変換
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })  // x軸のデータ
        .y(function(d) { return y_scale(d.val); })    // y軸のデータ
        ;
    console.log(valueline(data_set)); // SVGのpathプロパティ(d)の確認
    // 結果: M0,111.11111111111111L45.45454545454545,166.66666666666669L90.9090909090909,194.44444444444446L136.36363636363635,172.22222222222223L181.8181818181818,55.55555555555557L227.27272727272725,0L272.7272727272727,144.44444444444446L318.1818181818182,155.55555555555554L363.6363636363636,83.33333333333333L409.0909090909091,55.55555555555557L454.5454545454545,94.44444444444444L500,88.88888888888889
    

     

ポイント2:SVGのpathにデータバインディング時にdeta()メソッドではなくdatum()を使用します

  • d3.jsが描画要素追加して、各要素にデータをバインディングするときによくdeta()メソッドを使用します
    • これは複数の描画要素にデータ配列をスライスして各要素に一つデータをバインディングします
  • 今回は、作成されたSVGのpathプロパティ(d)のデータが一つだけで、datum()メソッドを利用して、作成したpathにデータをバインディングします
    • data()とdatum()の違いについて、「d3.jsの基本2:data()が複数のエレメント作成して一つの配列値をバインディングに対して, datum()が単一のエレメント作成して全データの値をバインディング 」をご参考
  • 折れ線チャート描画のデータバインディング方法
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)         // データのバインディング
      .attr("d", valueline)       // 設定されたd3.line() を渡す
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;

     

ポイント3:x軸(日付)作成するにはd3.scaleTimeを使用

  • 今回のデータセットに、特定な日付セットがあります
    • 通常、特定な入力に対して、d3.scaleBand()を使用しますが、x軸作成時に少しずれが生じますので、使用しません
  • d3.scaleTime()のドメインに日付の最大値、最小値をセットして、x軸のフォーマット(axis.tickFormat())で日付表示フォーマットを変更します
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ),      // 日付の最小値
                   d3.max(data_set.map( function(d){return d.date;} ) ) ] )  // 日付の最大値
    	.range([0, width]);
    
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))  // 日付のフォーマット変換
      ;

    時間/日付のフォーマットに関して「d3.jsの日付時間の扱いおよびフォーマットの変換 」をご参考

通常のチャート作成方法で折れ線チャートを作成

  • 上記ポイントを押さえて、通常のd3.jsチャート作成方法で折れ線チャートを作成します
    var data_set = [
    		{date:"2017-1-1", val:16},
    		{date:"2017-1-2", val:6},
    		{date:"2017-1-3", val:1},
    		{date:"2017-1-4", val:5},
    		{date:"2017-1-5", val:26},
    		{date:"2017-1-6", val:36},
    		{date:"2017-1-7", val:10},
    		{date:"2017-1-8", val:8},
    		{date:"2017-1-9", val:21},
    		{date:"2017-1-10", val:26},
    		{date:"2017-1-11", val:19},
    		{date:"2017-1-12", val:20},
    ] ;
    
    var timeparser = d3.timeParse("%Y-%m-%e");
    data_set = data_set.map( function(d){ 
    		return  { date: timeparser(d.date), val:d.val } ;
      } );
    
    var width=500, height=200 ;
    var x_scale = d3.scaleTime()
    	.domain( [ d3.min(data_set.map( function(d){return d.date;} ) ), d3.max(data_set.map( function(d){return d.date;} ) )] )
    	.range([0, width]);
      
    var y_scale = d3.scaleLinear()
    	.domain([0, d3.max( data_set.map(function(d) {return d.val; }) ) ])
    	.range([height, 0]);
    
    var valueline = d3.line()
        .x(function(d) { return x_scale(d.date); })
        .y(function(d) { return y_scale(d.val); })
        ;
    
    var line_svg = d3.select("body")
    	.append("svg")
      .attr("width", 800)
      .attr("height", 300)
      ;
    line_svg.append( "path" )
      .attr("transform", "translate(40, 20)")
      .datum(data_set)
      .attr("d", valueline)
      .attr("fill","none")
      .attr("stroke", "steelblue")
      .attr("stroke-width", 2)
    ;
    line_svg.append("g")
    	.attr("transform", "translate(40,"+(height+20)+")")
    	.call(d3.axisBottom(x_scale).tickFormat(d3.timeFormat("%m/%e")))
      ;
    line_svg.append("g")
    	.attr("transform", "translate(40,20)")
    	.call(d3.axisLeft(y_scale))
      ;

     

ホーム

古松

検索

Article Category

  • apache(7)
  • css(19)
  • drupal(295)
  • Electron(4)
  • html(34)
  • javascript(27)
  • laravel(4)
  • linux(5)
  • macOS(2)
  • mysql(13)
  • php(19)
  • python(4)
  • SEO(12)
  • video(72)
  • Visual Studio Code(4)
  • windows(13)
  • wordpress(32)