SlideShare a Scribd company logo
1 of 43
Download to read offline
D3.js講習会
∼1回目∼
Githubから
D3js_lecture
をダウンロードしてね
使用環境は
Google Chrome
Sublime Text 2
D3.js講習会について
• 講習会の目的
• D3.jsのコードを理解して,

自分のシステムに導入できるようにすること
• 全3回を予定
• 1回目:D3.jsとは何か? 棒グラフを作ろう!
• 2回目:update, enter, exit? 

    データの追加/削除をしてみよう!
• 3回目:棒グラフに軸を設定してみよう!
本日の内容
本日のゴール
D3.js
• JavaScript用のデータ視覚化ライブラリ
• Data Driven Document (D3) の略
Data Driven?
Data Driven
• D3.jsで採用されている Data Driven
• e.g., データを与える → グラフを描画
!
• みんながよく使用してるのは Event Driven
• e.g., ボタンをクリック → ページが遷移する
Data Driven
• みんながよく使用してるのは
• e.g., ボタンをクリック → ページが遷移する
!
• D3.jsで採用されている
• e.g., データが与える →
Data Driven Document とは,
与えられたデータによって文書を操作する形態のこと
実際にやってみよう!
• D3js_lecture/01/step01.html を開いてください
実際にやってみよう!
• D3js_lecture/01/step01.html を開いてください
bodyの中には
htmlタグがない!
このコードが
pタグを生成
練習
• 1. datasetに値を2つ追加してみよう!







• 2. datasetの値を1つだけにしてみよう!
練習
• 1. datasetに値を2つ追加してみよう!







• 2. datasetの値を1つだけにしてみよう!
Answer
Answer
ソースコードの解析
使用するデータ(Array)
pタグを生成している
D3.jsのコード
ソースコードの解析
d3.select( body ) bodyを選択
ソースコードの解析
d3.select( body )
.selectAll( p )
!
!
!
bodyを選択
その中のpタグを全て選択
※現在は存在しない
ソースコードの解析
d3.select( body )
.selectAll( p )
.data(dataset)
!
!
bodyを選択
その中のpタグを全て選択
pタグにdatasetを
バインディング
※今日のチェックポイント
データバインディング
• 与えたデータ (e.g., dataset) を

要素(e.g., pタグ)に結合すること
※ブラウザのコンソールを開いてください
ソースコードの解析
d3.select( body )
.selectAll( p )
.data(dataset)
.enter()
.append( p )
.text( New paragraph! );
bodyを選択
その中のpタグを全て選択
pタグにdatasetを
バインディング
] pタグをデータ数分追加
表示するテキスト
※selectAll,enter,appendは次回詳しくやります
与えられた (データ) によって (pタグ) を (生成) する

ソースコード
与えられた (データ) によって (pタグ) を (生成) する

ソースコード
棒グラフを作ってみよう!
棒グラフを作ってみよう!
• D3js_lecture/01/step02.html を開いてください
• BarChartメソッドの中を編集していきます
棒グラフの作成フロー
1. 棒グラフを作成するためのグラフィック表示

ツール(SVG)を使用する
2. SVGを使用して棒(四角形)をデータ数分作る
3. SVGを使用してラベルをデータ数分作る
棒グラフの作成フロー
1. 棒グラフを作成するためのグラフィック表示

ツール(SVG)を使用する
2. SVGを使用して棒(四角形)をデータ数分作る
3. SVGを使用してラベルをデータ数分作る
フロー1(SVGの作成)
var svg = d3.select( body )
.append( svg )
.attr( width , svgWidth)
.attr( height , svgHeight);
• SVGを使用する際のお約束
• attrは属性の指定 (e.g., <img width= 100 … />)
フロー2(棒の作成)
svg.selectAll('rect')
!
!
!
!
!
!
!
!
フロー2(棒の作成)
svg.selectAll('rect')
.data(dataset)
!
!
!
!
!
!
!
データのバインディング
フロー2(棒の作成)
svg.selectAll('rect')
.data(dataset)
.enter()
.append('rect')
!
!
!
!
!
データ数分の四角形を作成
フロー2(棒の作成)
svg.selectAll('rect')
.data(dataset)
.enter()
.append('rect')
.attr('width', function(d, i) {
return svgWidth / dataset.length - paddingX;
})
!
!
.attr('width', function(d, i) {
return svgWidth / dataset.length - paddingX;
})
棒の幅を設定
フロー2(棒の作成)
svg.selectAll('rect')
.data(dataset)
.enter()
.append('rect')
.attr('width', function(d, i) {
return svgWidth / dataset.length - paddingX;
})
!
!
.attr('width', function(d, i) {
return svgWidth / dataset.length - paddingX;
})
※コールバック関数で動的に幅を設定
   d : datasetのデータが順番に入る
    i:現在参照しているデータのインデックス
フロー2(棒の作成)
svg.selectAll('rect')
.data(dataset)
.enter()
.append('rect')
.attr('width', function(d, i) {
return svgWidth / dataset.length - paddingX;
})
!
!
.attr('width', function(d, i) {
return svgWidth / dataset.length - paddingX;
})
.attr('height', function(d) {
return d * 10;
})
※コールバック関数で動的に幅を設定
   d : datasetのデータが順番に入る
    i:現在参照しているデータのインデックス
フロー2(棒の作成)
.attr('x', function(d, i) { // x座標
return svgWidth / dataset.length * i;
})
.attr('y', function(d) { // y座標
return svgHeight - d * 10;
})
.attr('fill', 'teal');
フロー3(ラベルの作成)
• フロー2がきちんと理解できればOK
• フロー3も基本的にやっている事は,フロー2と同じ
って,ことで
完成!
今日のポイント
データバインディング
次週は
update, enter, exit
について学びます
参考資料
• ドットインストール:SVG入門
• http://dotinstall.com/lessons/basic_svg
• ドットインストール:D3.js入門
• http://dotinstall.com/lessons/basic_d3js
• Scott Murray, 長尾高弘(訳): インタラクティブ・

データビジュアライゼーション, オライリー・ジャッパン

More Related Content

What's hot

データベース・リファクタリング読書会第四回オープニング
データベース・リファクタリング読書会第四回オープニングデータベース・リファクタリング読書会第四回オープニング
データベース・リファクタリング読書会第四回オープニング
akitsukada
 

What's hot (8)

中国地方Db勉強会
中国地方Db勉強会中国地方Db勉強会
中国地方Db勉強会
 
データベース・リファクタリング読書会第四回オープニング
データベース・リファクタリング読書会第四回オープニングデータベース・リファクタリング読書会第四回オープニング
データベース・リファクタリング読書会第四回オープニング
 
MongoDB: システム可用性を拡張するインデクス戦略
MongoDB: システム可用性を拡張するインデクス戦略MongoDB: システム可用性を拡張するインデクス戦略
MongoDB: システム可用性を拡張するインデクス戦略
 
MySQL のユーザー定義変数と RDB のココロ
MySQL のユーザー定義変数と RDB のココロMySQL のユーザー定義変数と RDB のココロ
MySQL のユーザー定義変数と RDB のココロ
 
今すぐ使えるクラウドとPostgreSQL
今すぐ使えるクラウドとPostgreSQL今すぐ使えるクラウドとPostgreSQL
今すぐ使えるクラウドとPostgreSQL
 
Web で変わったクラウドと postgre sql の今と昔
Web で変わったクラウドと postgre sql の今と昔Web で変わったクラウドと postgre sql の今と昔
Web で変わったクラウドと postgre sql の今と昔
 
Web エンジニアが postgre sql を選ぶ 3 つの理由
Web エンジニアが postgre sql を選ぶ 3 つの理由Web エンジニアが postgre sql を選ぶ 3 つの理由
Web エンジニアが postgre sql を選ぶ 3 つの理由
 
実務で役立つデータベースの活用法
実務で役立つデータベースの活用法実務で役立つデータベースの活用法
実務で役立つデータベースの活用法
 

Viewers also liked

D3jsを使ってみた@wcan lt大会
D3jsを使ってみた@wcan lt大会D3jsを使ってみた@wcan lt大会
D3jsを使ってみた@wcan lt大会
Takuya Ueda
 

Viewers also liked (7)

D3.jsによるDOM操作
D3.jsによるDOM操作D3.jsによるDOM操作
D3.jsによるDOM操作
 
ちゃんと学ぶ D3.js
ちゃんと学ぶ D3.jsちゃんと学ぶ D3.js
ちゃんと学ぶ D3.js
 
D3jsを使ってみた@wcan lt大会
D3jsを使ってみた@wcan lt大会D3jsを使ってみた@wcan lt大会
D3jsを使ってみた@wcan lt大会
 
細かすぎて伝わらないD3 ver.4の話
細かすぎて伝わらないD3 ver.4の話細かすぎて伝わらないD3 ver.4の話
細かすぎて伝わらないD3 ver.4の話
 
LINE Botでテラレンの受付を自動化してみた
LINE Botでテラレンの受付を自動化してみたLINE Botでテラレンの受付を自動化してみた
LINE Botでテラレンの受付を自動化してみた
 
データビジュアライゼーションはなぜ「コストが高い」と言われるのか
データビジュアライゼーションはなぜ「コストが高い」と言われるのかデータビジュアライゼーションはなぜ「コストが高い」と言われるのか
データビジュアライゼーションはなぜ「コストが高い」と言われるのか
 
全脳アーキテクチャ若手の会 強化学習
全脳アーキテクチャ若手の会 強化学習全脳アーキテクチャ若手の会 強化学習
全脳アーキテクチャ若手の会 強化学習
 

Similar to D3.js講習会〜1回目〜

論理思考とプログラミング 2013f#10
論理思考とプログラミング 2013f#10論理思考とプログラミング 2013f#10
論理思考とプログラミング 2013f#10
Noritada Shimizu
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
terurou
 
Firefox拡張機能を始める
Firefox拡張機能を始めるFirefox拡張機能を始める
Firefox拡張機能を始める
egtra
 
4時間まったりWordPressテーマ作成講座
4時間まったりWordPressテーマ作成講座4時間まったりWordPressテーマ作成講座
4時間まったりWordPressテーマ作成講座
Shinichi Nishikawa
 

Similar to D3.js講習会〜1回目〜 (20)

D3.jsを使ったデータビジュアライズ勉強会
D3.jsを使ったデータビジュアライズ勉強会D3.jsを使ったデータビジュアライズ勉強会
D3.jsを使ったデータビジュアライズ勉強会
 
JavaScript 研修
JavaScript 研修JavaScript 研修
JavaScript 研修
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 
論理思考とプログラミング 2013f#10
論理思考とプログラミング 2013f#10論理思考とプログラミング 2013f#10
論理思考とプログラミング 2013f#10
 
2012.02.28 IAMAS GeekLab #037 MyScripts
2012.02.28 IAMAS GeekLab #037 MyScripts2012.02.28 IAMAS GeekLab #037 MyScripts
2012.02.28 IAMAS GeekLab #037 MyScripts
 
Google Product
Google ProductGoogle Product
Google Product
 
Google Docs使ってRのコードを実行/共有
Google Docs使ってRのコードを実行/共有Google Docs使ってRのコードを実行/共有
Google Docs使ってRのコードを実行/共有
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
Firefox拡張機能を始める
Firefox拡張機能を始めるFirefox拡張機能を始める
Firefox拡張機能を始める
 
4時間まったりWordPressテーマ作成講座
4時間まったりWordPressテーマ作成講座4時間まったりWordPressテーマ作成講座
4時間まったりWordPressテーマ作成講座
 
20121017_アプリ制作勉強会@GMO Yours
20121017_アプリ制作勉強会@GMO Yours20121017_アプリ制作勉強会@GMO Yours
20121017_アプリ制作勉強会@GMO Yours
 
Grails 2.0.0.M1の話
Grails 2.0.0.M1の話 Grails 2.0.0.M1の話
Grails 2.0.0.M1の話
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
 
20170312 r言語環境構築&amp;dplyr ハンズオン
20170312 r言語環境構築&amp;dplyr ハンズオン20170312 r言語環境構築&amp;dplyr ハンズオン
20170312 r言語環境構築&amp;dplyr ハンズオン
 
後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜
 
インフォグラフィックス時代のD3.js入門
インフォグラフィックス時代のD3.js入門インフォグラフィックス時代のD3.js入門
インフォグラフィックス時代のD3.js入門
 
jQuery Mobile ハンズオン 資料
jQuery Mobile ハンズオン 資料jQuery Mobile ハンズオン 資料
jQuery Mobile ハンズオン 資料
 
JavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へJavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へ
 

D3.js講習会〜1回目〜