サンキーダイアグラム
工程間流量図(サンキーダイアグラム)とは、フローチャートのように流れを見ながらも、どちらかというとそのフロー間の流量に注目したグラフであり、要素と要素の間でどれだけの量が流れているのか?に着目するためのものです。通常のフローチャートでは、単純に1本の線で結ばれているだけなのですが、サンキーダイアグラムは、その流量によって、線の太さを変えて表現してくれます。莫大なデータを蓄積・集計し、要素間でどれだけの量が流れているのか?を見るのには最適なチャートです。
今回は、とある病院のから病院への転院人数を集計し、それを流量でグラフ化したものをつくったサンプルです。この他にも、拠点間の物量把握であったり、トラフィックを視覚化したり、いろいろ使い勝手がありそうです。
グラフ本体
ソースコード
<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="sample1" scaling="true" scrolling="true" />
<Content type="html">
<![CDATA[
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript"
src="https://www.google.com/jsapi?autoload={'modules':[{'name':'visualization','version':'1.1','packages':['sankey']}]}">
</script>
<script type="text/javascript">
google.setOnLoadCallback(initialize);
function initialize() {
// The URL of the spreadsheet to source data from.
var query = new google.visualization.Query(
'https://docs.google.com/spreadsheet/pub?key=0AjN10lCzkUqkdHJqaUxkaUdyOUR3VGQwM3VHWTdWcGc&gid=13');
query.send(draw);
}
function draw(response) {
if (response.isError()) {
alert('Error in query');
}
var data = response.getDataTable();
var chart = new google.visualization.Sankey(document.getElementById('chart_div'));
//行の数を取得する
var numRows = response.getDataTable().getNumberOfRows();
//カラムを設定し、データテーブルを用意
var dataTable = new google.visualization.DataTable();
dataTable.addColumn({ type: 'string', id: data.getValue(0,0) });
dataTable.addColumn({ type: 'string', id: data.getValue(0,1) });
dataTable.addColumn({ type: 'number', id: data.getValue(0,2) });
var cnt = numRows -1;
//データテーブルにデータを流し込む
for(i=1;i<cnt;i++){
var row = [];
row.push(data.getValue(i, 0));
row.push(data.getValue(i, 1));
row.push(data.getValue(i, 2));
dataTable.addRow(row);
}
//グラフオプションの指定
var options = {
width: 600,
sankey: {
link: { color: { fill: '#d799ae' } },
node: { color: { fill: '#a61d4c' },
label: { color: '#871b47' },
nodePadding: 20,
},
}
};
//グラフの描画
chart.draw(dataTable, options);
}
</script>
</head>
<body style="font-family: Arial;border: 0 none;">
<div id="chart_div"></div>
</body>
</html>
]]>
</Content>
</Module>
ポイント
まだ、登場したばかりの新チャートであるため、オプション項目が少なく、それぞれの流量ラインにツールチップすら表示もできないのですが、今後拡張されたら、4カラム目あたりにツールチップ表示内容などをコメントで残し、それを読み込むなんてこともできるようになるのでは?と期待しています。
今回は、集計をせず作図しているため、ひとつの要素から複数のラインが同じ要素に流れている為、若干グラフとしては見づらいのですが、これらをきちんと集計し1本のグラフに集約することで、より見やすいグラフへと変わると思います。
また、このグラフは、response.getDataTableで帰ってきた値をそのままチャートに流し込めないので、データテーブルを用意し、カラムを用意して流し込んでいます。カラム自体今回のグラフには出てこないのですが、一応設定しておきます。