Html5j data visualization_and_d3

99
データ可視化 について 2014/04/18 HTML5とか勉強会 @muddydixon

description

html5とか勉強会

Transcript of Html5j data visualization_and_d3

Page 1: Html5j data visualization_and_d3

データ可視化 について

2014/04/18 HTML5とか勉強会 @muddydixon

Page 2: Html5j data visualization_and_d3

! muddydixon " muddy.dixon # muddydixon !

Node.js Perl Visualization TimeSeries NeuralNetwork

私 is

Page 3: Html5j data visualization_and_d3

アジェンダデータ可視化の目的 データ可視化とは データ可視化の理屈 Webでのデータ可視化のいいところ D3.jsとは

Page 4: Html5j data visualization_and_d3

可視化の目的

Page 5: Html5j data visualization_and_d3

データ可視化とはThe main goal of data visualization is its ability to visualize data, communicating information clearly and effectivelty.

Vitaly Friedman

$

データ可視化の目的は、データを可視化し、情報を明確かつ効率的に伝えることである

$

Page 6: Html5j data visualization_and_d3

可視化の目的

伝えてどうする?

Page 7: Html5j data visualization_and_d3

可視化の目的

☓ 可視化のための可視化 ◯ 目的達成のための可視化

Page 8: Html5j data visualization_and_d3

可視化の目的

☓「どう可視化するか?」 ◯「何を可視化するか?」 ◎「なんのために可視化するか?」

Page 9: Html5j data visualization_and_d3

可視化の目的メトリクスの監視 例) モニタリングツール トレンドの把握 例) 株式チャート 関係性の把握 例) ソーシャルグラフ 属性の分析 例) 顧客属性の割合や売れ筋ジャンルの割合

Page 10: Html5j data visualization_and_d3

可視化の目的事実を発掘できてこその可視化 事実を活用できてこその可視化 !

改善行為の促進のための可視化 (ビジネス、政治、家計など)

Page 11: Html5j data visualization_and_d3

目的を阻害する可視化

Page 12: Html5j data visualization_and_d3

ダメな可視化効率的じゃない 明確じゃない !

※ 「ウソを付く」「サンプルに問題がある」とかはちょっとおいておきます

Page 13: Html5j data visualization_and_d3

明確じゃない

Page 14: Html5j data visualization_and_d3

明確じゃない

Page 15: Html5j data visualization_and_d3

明確じゃない

Page 16: Html5j data visualization_and_d3

明確じゃない

Page 17: Html5j data visualization_and_d3

明確じゃない

Page 18: Html5j data visualization_and_d3

明確じゃない

Page 19: Html5j data visualization_and_d3

効率的じゃない

Page 20: Html5j data visualization_and_d3

いろいろ

Page 21: Html5j data visualization_and_d3

もっと欲しい人はこちらに

http://wtfviz.net/

Page 22: Html5j data visualization_and_d3

データ可視化とは

Page 23: Html5j data visualization_and_d3

データ可視化とはThe main goal of data visualization is its ability to visualize data, communicating information clearly and effectivelty.

Vitaly Friedman

$

データ可視化の目的は、データを可視化し、情報を明確かつ効率的に伝えることである

$

Page 24: Html5j data visualization_and_d3

つまり% 情報を伝えそびれている可視化 % 明確ではない可視化

% 効率的ではない可視化

!

上記は「可視化」ではありません

Page 25: Html5j data visualization_and_d3

可視化の定義に則ると情報が視覚的な表現に置き換えられている 情報が明確に伝えられている 情報が効率的に伝えられている

&' ( )

Page 26: Html5j data visualization_and_d3

なぜ可視化するとよいか

53,434 28,397 41,334

Page 27: Html5j data visualization_and_d3

なぜ可視化するとよいか

53,434 28,397 41,334

Page 28: Html5j data visualization_and_d3

なぜ可視化するとよいか

53,434 28,397 41,334

(231.16) (168.51) (203.31)

Page 29: Html5j data visualization_and_d3

なぜ可視化するとよいか

53,434 28,397 41,334

Page 30: Html5j data visualization_and_d3

なぜ可視化するとよいか

53,434 28,397 41,334

49,346 93,853 23,579

80,132 86,103 35,203

Page 31: Html5j data visualization_and_d3

なぜ可視化するとよいか

(53,434)(28,397)(41,334)(49,346)(93,853)(23,579)(80,132)(86,103)(35,203)

Page 32: Html5j data visualization_and_d3

なぜ可視化するとよいか値の大小   ▶ 高さの大小 値の大小   ▶ 面積の大小 上昇傾向   ▶ 右上がりの傾き 下降傾向   ▶ 右下がりの傾き 同じカテゴリ ▶ 同じ色 関係性 ▶ 密集度

Page 33: Html5j data visualization_and_d3

なぜ可視化するとよいか

経験的・認知的な 既存知識を効率的に 利用した理解の促進

&' ( )

Page 34: Html5j data visualization_and_d3

なぜ可視化するとよいか

すぐ分かる is 正義

&' ( )

Page 35: Html5j data visualization_and_d3

認知機能・経験をフルに使う# Sepal.Lengt Sepal.Widt Petal.Lengt Petal.Width Species1 5.1 3.5 1.4 0.2 setosa2 4.9 3.0 1.4 0.2 setosa3 4.7 3.2 1.3 0.2 setosa4 4.6 3.1 1.5 0.2 setosa5 5.0 3.6 1.4 0.2 setosa51 7.0 3.2 4.7 1.4 versicolor52 6.4 3.2 4.5 1.5 versicolor53 6.9 3.1 4.9 1.5 versicolor54 5.5 2.3 4.0 1.3 versicolor55 6.5 2.8 4.6 1.5 versicolor101 6.3 3.3 6.0 2.5 virginica102 5.8 2.7 5.1 1.9 virginica103 7.1 3.0 5.9 2.1 virginica104 6.3 2.9 5.6 1.8 virginica105 6.5 3.0 5.8 2.2 virginica

みんなだいすきiris

Page 36: Html5j data visualization_and_d3

ここからなにか わかるわけでは ないですよね?

Page 37: Html5j data visualization_and_d3

統計量で表現Sepal Length

Sepal Width

Petal Length

Petal Width

Min 4.3 2.0 1.0 0.1

1st Qu. 5.1 2.8 1.6 0.3

Median 5.8 3.0 4.35 1.3

Mean 5.843 3.057 3.758 1.199

3rd Qu. 6.4 3.3 5.1 1.8

Max 7.9 4.4 6.9 2.5

Page 38: Html5j data visualization_and_d3

これなら なんとか

Page 39: Html5j data visualization_and_d3

図形の経験・認知能力を利用

Page 40: Html5j data visualization_and_d3

図形の経験・認知能力を利用• 分布の幅が広い • 中央値が上に偏っている • 大きく2つの峰がある

• 中央値が若干、上に偏り

• 峰が2つ・・・?

• 均等に分布 • 中央値がおおよそ中心

• 他の属性と比較して分布の幅が小さい

• 外れ値がちらほら

Page 41: Html5j data visualization_and_d3

「認知」が「把握」を加速Sepal Length

Sepal Width

Petal Length

Petal Width

Min 4.3 2.0 1.0 0.1

1st Qu. 5.1 2.8 1.6 0.3

Median 5.8 3.0 4.35 1.3

Mean 5.843 3.057 3.758 1.199

3rd Qu. 6.4 3.3 5.1 1.8

Max 7.9 4.4 6.9 2.5

Page 42: Html5j data visualization_and_d3

その他にも箱ひげ図の代わりに ヒストグラム

ヒストグラムを種別毎に 表現

Page 43: Html5j data visualization_and_d3

可視化の理論

Page 44: Html5j data visualization_and_d3

データセットと可視化# ガク片幅 花弁幅 Species1 3.5 0.2 setosa2 3.0 0.2 setosa3 3.2 0.2 setosa4 3.1 0.2 setosa5 3.6 0.2 setosa51 3.2 1.4 versicolor52 3.2 1.5 versicolor53 3.1 1.5 versicolor54 2.3 1.3 versicolor55 2.8 1.5 versicolor101 3.3 2.5 virginica102 2.7 1.9 virginica103 3.0 2.1 virginica104 2.9 1.8 virginica105 3.0 2.2 virginica

Page 45: Html5j data visualization_and_d3

可視化で意識する概念

データ

データ変数 視覚変数

視覚記号

可視化データセット様々なフィールドの値からなる レコードを複数含むデータ群 変数抽出・代数処理・ 尺度化処・理統計処理が済んだもの

可視化対象とするフィールドを 含むデータ。ひとつひとつが意味を持った単位(例:SQLの行)

フィールドの値そのもの 数値(メジャー)やカテゴリ変数(ディメンジョン)。ひとつひとつが視覚変数に置換される

視覚表現ひとつひとつを指す 位置やサイズ、色、傾き、強度(透明度・彩度・明度)、テクスチャなど

視覚変数を集約させた記号 点や円、矩形、弧、立体など

データセットのデータに対応する 記号の集合による可視化

対応

対応

対応

Page 46: Html5j data visualization_and_d3

データセットと可視化# ガク片幅 花弁幅 Species1 3.5 0.2 setosa2 3.0 0.2 setosa3 3.2 0.2 setosa4 3.1 0.2 setosa5 3.6 0.2 setosa51 3.2 1.4 versicolor52 3.2 1.5 versicolor53 3.1 1.5 versicolor54 2.3 1.3 versicolor55 2.8 1.5 versicolor101 3.3 2.5 virginica102 2.7 1.9 virginica103 3.0 2.1 virginica104 2.9 1.8 virginica105 3.0 2.2 virginica

データ

視覚記号

Page 47: Html5j data visualization_and_d3

データセットと可視化# ガク片幅 花弁幅 Species1 3.5 0.2 setosa2 3.0 0.2 setosa3 3.2 0.2 setosa4 3.1 0.2 setosa5 3.6 0.2 setosa51 3.2 1.4 versicolor52 3.2 1.5 versicolor53 3.1 1.5 versicolor54 2.3 1.3 versicolor55 2.8 1.5 versicolor101 3.3 2.5 virginica102 2.7 1.9 virginica103 3.0 2.1 virginica104 2.9 1.8 virginica105 3.0 2.2 virginica

データ変数

Y視覚変数

X

Page 48: Html5j data visualization_and_d3

可視化の概念(理屈上)# Sepal.Lengt

hSepal.Width Petal.Length Petal.Width Species

1 5.1 3.5 1.4 0.2 setosa

2 4.9 3.0 1.4 0.2 setosa

3 4.7 3.2 1.3 0.2 setosa

4 4.6 3.1 1.5 0.2 setosa

5 5.0 3.6 1.4 0.2 setosa

51 7.0 3.2 4.7 1.4 versicolor

52 6.4 3.2 4.5 1.5 versicolor

53 6.9 3.1 4.9 1.5 versicolor

萼片長 花弁長 種別

5.1 1.4 setosa

萼片長 5.1 比例尺度

花弁長 1.4 比例尺度

種別 setosa 名義尺度

萼片長 比例尺度 位置1

花弁長 比例尺度 位置2

種別 名義尺度 色

Sepal.Length Petal.Length Species

5.1 1.4 setosa

4.9 1.4 setosa

4.7 1.3 setosa

4.6 1.5 setosa

5.0 1.4 setosa

7.0 4.7 versicolor

6.4 4.5 versicolor

6.9 4.9 versicolor

萼片長 花弁長 種別

100 27 赤

データセット

データセット(変数抽出)

データ

データ変数 視覚変数

視覚記号

可視化

対応

対応

対応

Page 49: Html5j data visualization_and_d3

データ変数/視覚変数

萼片幅:x座標、花弁幅:y座標、種別:色 と3つのデータ変数:視覚変数を対応

Page 50: Html5j data visualization_and_d3

データ変数/視覚変数

散布図だと4つくらいの変数は表現可能 ※ ただし、setosaの透明度が高く視認性が低いので・・・

Page 51: Html5j data visualization_and_d3

データ変数/視覚変数

散布図だと4つくらいの変数は表現可能 ※ ただし、setosaの透明度が高く視認性が低いので・・・

データ変数の「値」と「面積」を対応付ける!! 「半径」を対応付けてしまうと面積は自乗される!

Page 52: Html5j data visualization_and_d3

視覚変数の特性選択性:色、方向など 視覚変数が異なる場合、弁別が可能 関連性:色、形状など 視覚変数が異なる場合、同一グループの認識が可能 定量性:サイズ、位置など 視覚変数が異なる場合、2つの差を識別することが可能 順序性:強さ(透明度、彩度)など 視覚変数が異なる場合、順序の大小を識別することが可能

Page 53: Html5j data visualization_and_d3

データ変数の尺度名義尺度:カテゴリ、名称など 同じかそれ以外かの比較しかできない 順序尺度:徒競走の順位、3択のアンケートなど 同じかどうか・大小比較はできるが、加減などの演算はできない 等差尺度:日付など 差の比較はできるが、ゼロ点がなく比の意味が無い 比例尺度:人数、回数、経過秒数など ゼロ点があり、差の比較、比の比較が可能

Page 54: Html5j data visualization_and_d3

視覚変数の特性

これも掲載すればよかったと反省していますDesigning Data Visualizations (2011, O’REILLY)

Page 55: Html5j data visualization_and_d3

視覚変数の特性 (推奨)

これも掲載すればよかったと反省していますDesigning Data Visualizations (2011, O’REILLY)

カテゴリを示すなら一択

カテゴリを示すなら一択テクスチャ系は図が煩雑になりやすい

Page 56: Html5j data visualization_and_d3

Webでの可視化のいいところ

Page 57: Html5j data visualization_and_d3

利点Webで共有し、多くの人にデータに含まれる事実を届けることができる 税金はどこに行った? マウスやキーボードによるインタラクションが利用できる アニメーションが利用できる 時間軸を実際の時間に割り当てることで、表現できるデータ変数を1つ増やすことができる

Page 58: Html5j data visualization_and_d3

Webでの共有

http://spending.jp/

Page 59: Html5j data visualization_and_d3

インタラクション

http://square.github.io/crossfilter/ http://www.cs.umd.edu /~bederson/papers/index.html

Page 60: Html5j data visualization_and_d3

アニメーション

https://www.youtube.com/watch?v=ezVk1ahRF78#t=4m23s

Page 61: Html5j data visualization_and_d3

SVGについて

Page 62: Html5j data visualization_and_d3

SVGとはScalable Vector Graphics 大きくしても綺麗 XML Document (DOM) Inspectorで見やすい

Page 63: Html5j data visualization_and_d3

SVGで使えるタグsvg g defs, symbol, use path, line, rect, circle ellipse, polyline, polygon !

あとはフィルター周りがたくさんありますがほとんど使う機会はありません

Page 64: Html5j data visualization_and_d3

SVGはこんな感じ <svg width="400" height="300">! <g transform="translate(50,50)">! <circle r="5" cx="128.571" cy="111.733" fill="blue"></circle>! <circle r="5" cx="21.428" cy="121.600" fill="red"></circle>! <circle r="5" cx="77.142" cy="138.4" fill="blue"></circle>! <circle r="5" cx="111.428" cy="135.2" fill="blue"></circle>! <circle r="5" cx="300" cy="0" fill="red"></circle>! <circle r="5" cx="0" cy="73.066" fill="red"></circle>! <circle r="5" cx="244.285" cy="192.266" fill="blue"></circle>! <circle r="5" cx="270" cy="200" fill="red"></circle>! <circle r="5" cx="51.428" cy="173.333" fill="red"></circle>! </g>! </svg>

Page 65: Html5j data visualization_and_d3

SVGについてはこちらを

http://www.slideshare.net/kadoppe/inline-svghttp://www.slideshare.net/ssuser99dc16/svg-maniaxcss-nite-after-dark7-svgmatsuda

Page 66: Html5j data visualization_and_d3

D3.js

Page 67: Html5j data visualization_and_d3

D3.jsとはURL (http://d3js.org/) Data-Driven-Documents data に基づいて html/svg document object の処理を行う、というコンセプト SVG操作 + 数値処理 + 可視化ユーティリティ の総合JavaScriptライブラリ SVG:selector/attr/style 数値処理:scale/nest/array/math 可視化ユーティリティ: scale/axis/layout

Page 68: Html5j data visualization_and_d3

具体例 <!doctype html>! <html lang="ja">! <head>! <meta charset="utf8">! <title>d3 introduction</title>! <style>! .axis line, .axis path { fill: none; stroke: grey; }! </style>! </head>! <body>!! <div>! <p>0th paragraph</p>! <p>1st paragraph</p>! <p>2nd paragraph</p>! </div>!! <script type="text/javascript" charset="utf8" src="../components/d3/d3.min.js"></script>! <script type="text/javascript" charset="utf8" src="./introduction.js"></script>! </body>! </html>

Page 69: Html5j data visualization_and_d3

具体例 (属性/スタイル操作) var paragraphs = d3.select('body').selectAll('p');! paragraphs.style({background: 'cyan'});

Page 70: Html5j data visualization_and_d3

具体例 (属性/スタイル操作) var paragraphs = d3.select('body').selectAll('p');! var pdata = [! {text: "modified: 0th paragraph"},! {text: "modified: 1th paragraph"},! {text: "modified: 2th paragraph"}! ];! paragraphs.data(pdata).text(function(d){ return d.text; });

.data()でデータを紐付ける(ひとつのpに対して、ひとつのデータ) .attr()/.text()/.style()などは引数に紐付けられたデータを取り、それに応じた処理を行う

Page 71: Html5j data visualization_and_d3

具体例 (データに基づく追加) var pdata = d3.range(0, 5)! .map(function(id){! return {! id: id,! text: id + "th paragraph"! };! });!! paragraphs.data(pdata).enter()! .append('p')! .text(function(d){! return d.text;! });

増えた!

Page 72: Html5j data visualization_and_d3

具体例 (データに基づく追加)でも2つしか増えてない! データの長さは(pdata.length=)5 なぜか?

既存のp 3

差分 2 ▶ これが増えた分!

データ 5

Page 73: Html5j data visualization_and_d3

var pdata = d3.range(0, 5)! .map(function(id){! return {! id: id,! text: id + "th paragraph"! };! });!! paragraphs.data(pdata).enter()! .append('p')! .text(function(d){! return d.text;! });

具体例 (データに基づく追加)

.enter()によって、データ-DOMを処理の対象にする

Page 74: Html5j data visualization_and_d3

具体例 (データに基づく削除) var lessData = pdata.slice(0, 2);! paragraphs.data(lessData).exit().remove();

「.data().exit()」 .exit()によって、DOM-データを処理の対象にする

データ 2

差分 1 ▶ これが.remove()した分

既存のp 3

Page 75: Html5j data visualization_and_d3

Selection.select()/.selectAll()で取得したDOMや.append()によって追加したDOMをselectionといいます .data()によりデータを紐付けることができます .attr()/.style()/.text()などでは紐付けられたデータを利用してDOMを処理することができます

Page 76: Html5j data visualization_and_d3

Data Driven Documents

Page 77: Html5j data visualization_and_d3

Selection

紐付けたデータ既存のDOM

.exit()selection

.enter()

Page 78: Html5j data visualization_and_d3

Selection (例えば)

紐付けたデータ既存のDOM

.exit()selection

.enter()

属性・スタイル・テキストの変更などを行う

新規にDOMを追加し、同時に属性・スタイル・テキストをセットする

既存のDOMを削除したり、透明度を上げたりを行う

Page 79: Html5j data visualization_and_d3

作成するときのコツSVGは基本 後に追加したものが上に表示される Layer(gタグ)を使って制御するとうまく書けます transform属性をうまく使うと楽です text周りは難しいです(kadoppeさんも言ってます)

Page 80: Html5j data visualization_and_d3
Page 81: Html5j data visualization_and_d3

<svg width="500" height="500">! <g width="480" height="480" transform="translate(10,10)">! <g class="background-layer">! <g class="ruler">! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="0" y2="0"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="48" y2="48"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="96" y2="96"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="144" y2="144"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="192" y2="192"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="240" y2="240"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="288" y2="288"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="336" y2="336"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="384" y2="384"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="432" y2="432"></line>! </g>! </g>! <g class="chart-layer">! <g><rect x="10" width="100" height="22" y="458" fill="#1f77b4"></rect></g>! <g><rect x="170" width="100" height="209" y="271" fill="#ff7f0e"></rect></g>! <g><rect x="330" width="100" height="478" y="2" fill="#2ca02c"></rect></g>! </g>! <g class="info-layer"></g>! </g>! </svg>

Page 82: Html5j data visualization_and_d3

まとめ

Page 83: Html5j data visualization_and_d3

データ可視化とはThe main goal of data visualization is its ability to visualize data, communicating information clearly and effectivelty.

Vitaly Friedman

$

データ可視化の目的は、データを可視化し、情報を明確かつ効率的に伝えることである

$

Page 84: Html5j data visualization_and_d3

可視化が果たすべき役割視覚表現という「経験的」「認知的」に理解をサポートする表現に変換するのが可視化 データを記号に、データセットを可視化に変換する 「よく使われる可視化」はそれだけで理解が進む可視化 理解が阻まれたら、それはすでに可視化じゃない!

Page 85: Html5j data visualization_and_d3

可視化の目的

☓「どう可視化するか?」 ◯「何を可視化するか?」 ◎「なんのために可視化するか?」

Page 86: Html5j data visualization_and_d3

可視化の目的事実を発掘できてこその可視化 事実を活用できてこその可視化 !

改善行為の促進のための可視化 (ビジネス、政治、家計など)

Page 87: Html5j data visualization_and_d3

データ可視化のマントラOverview First, Zoom and Filter, Then Details-on-Demand Overview First, Zoom and Filter, Then Details-on-Demand Overview First, Zoom and Filter, Then Details-on-Demand

Ben Shneiderman

$

Page 88: Html5j data visualization_and_d3

時間があったら

Page 89: Html5j data visualization_and_d3

作ってみよう!

萼片長を高さとする棒グラフ

Page 90: Html5j data visualization_and_d3

用意するものコード: https://gist.github.com/muddydixon/9295829 Webサーバ: http://blog.kamipo.net/entry/2013/02/20/122225 好きなサーバを立ち上げてください

Page 91: Html5j data visualization_and_d3

html <!doctype html>! <html lang="ja">! <head>! <meta charset="utf8">! <title>d3 scatter plog</title>! <style>! .axis line, .axis path { fill: none; stroke: grey; }! </style>! </head>! <body>! <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>! <script type="text/javascript" charset="utf8" src="./iris.js"></script>! </body>! </html>

Page 92: Html5j data visualization_and_d3

JavaScript データの読み込みvar WIDTH = 500, HEIGHT = 500, margin = 50;!var width = WIDTH - 2 * margin, height = HEIGHT - 2 * margin;!var key = 'Sepal.Length';!!// iris.csv ファイルを読み込む!

d3.csv(! "./iris.csv",! // 行の型を修正!

function(d){! for(var attr in d){! if(! isNaN(Number(d[attr]))){! d[attr] = +d[attr];! }! return d;! }! },! // データを取得!

function(err, data){!

Page 93: Html5j data visualization_and_d3

JavaScript SVG要素の作成 // データを取得!

function(err, data){!! // svg要素を追加!

var svg = d3.select('body').append('svg').attr({! width: WIDTH,! height: HEIGHT! });! // マージンを確保して、軸などを表示できるようにする!

var main = svg.append('g').attr({! width: width,! height: height,! transform: "translate("+margin+","+margin+")"! });!! // 色の尺度!

var color = d3.scale.category10();

Page 94: Html5j data visualization_and_d3

JavaScript データの整形と整理 // データを入れ子にする!

var speciesData = d3.nest()! // 種類ごとに分類するキーを指定!

.key(function(d){ return d.Species;})! // 出力をキーにマッチした配列から、平均値に変更!

.rollup(function(values){! return d3.mean(values, function(d){ return d[key]; });! })! // 値を配列で取得!

.entries(data);!! // 種類のキー一覧を取得!

var species = speciesData.map(function(d){ return d.key; });!! // 全体の高さの範囲を取得!

var domain = d3.extent(data, function(d){ return d[key]; });!

Page 95: Html5j data visualization_and_d3

JavaScript 尺度作成 // y座標の尺度を取得!

var yScale = d3.scale.linear()! // 変換後の範囲(値域)!

.range([0, height])! // 変換前の範囲(定義域)!

.domain([0, domain[1]]);!! // x座標の尺度を取得!

var xScale = d3.scale.ordinal()! // 変換後の範囲(値域)!

.rangeBands([0, width], .2)! // 変換前の範囲(定義域)!

.domain(species);

Page 96: Html5j data visualization_and_d3

JavaScript 棒を描画 // 棒(のグループ)要素を作成!

var bar = main.selectAll('g')! .data(speciesData)! .enter()! .append('g')! .attr({! transform: function(d){! return "translate("+xScale(d.key)+","+height+")";! }! });!! // 棒を描画!

bar.append('rect').attr({! // 矩形の高さ!

height: function(d){ return yScale(d.values); },! // 矩形の位置!

y: function(d){ return -yScale(d.values); },! // 矩形の幅!

width: xScale.rangeBand(),! // 矩形の色!

fill: function(d){ return color(d.key); }! });!

Page 97: Html5j data visualization_and_d3

JavaScript 棒に値を描画 // 棒(のグループ)要素を作成!

var bar = main.selectAll('g')! .data(speciesData)! .enter()! .append('g')! .attr({! transform: function(d){! return "translate("+xScale(d.key)+","+height+")";! }! });!! // 棒を描画 (前述)!

// 値を描画!

bar.append('text')! // テキストは分類した時のキー!

.text(function(d){! return d.values.toFixed(2);! })! .attr({! // 位置を棒の上に!

dy: function(d){ return - yScale(d.values); },! dx: xScale.rangeBand() / 2,! fill: 'black'! }).style('text-anchor', 'middle');

Page 98: Html5j data visualization_and_d3

JavaScript 軸の描画 // x軸生成のユーティリティ!

var xAxisSvg = d3.svg.axis().scale(xScale);! // y軸生成のユーティリティ!

var yAxisSvg = d3.svg.axis().scale(yScale.copy()! .range([height, 0])).orient('left');! // x軸を生成!

var xAxis = main.append('g').call(xAxisSvg).attr('class', 'axis')! .attr("transform", "translate(0,"+height+")");! // y軸を生成!

var yAxis = main.append('g').call(yAxisSvg).attr('class', 'axis');!! // y軸のラベルを記述!

main.append('text').text(key).attr({! transform: "translate(-30,"+(height / 2)+") rotate(-90)"! });

Page 99: Html5j data visualization_and_d3

課題棒グラフ 折線グラフ 散布図 インタラクション アニメーション ジオマッピング