円グラフ
Google Apps Scriptで作る
グラフ本体
ソースコード
function doGet(){
//スプレッドシート名とレンジの取得
var sheet = SpreadsheetApp.openById("0AjN10lCzkUqkdHJqaUxkaUdyOUR3VGQwM3VHWTdWcGc").getSheetByName("sheet2");
var data = sheet.getRange('A1:H10').getValues();
//データテーブルの生成
var dataTable = Charts.newDataTable();
//月名をカラムとして構築
dataTable.addColumn(Charts.ColumnType.STRING, data[0][0]);
for(var i=1; i<data.length-1; i++){
dataTable.addColumn(Charts.ColumnType.NUMBER, data[0][i]);
}
//配列データをテーブルに格納
var counter = 1;
for(var i=0;i<data.length-1;i++){
var row = [];
row.push(String(data[counter][0]));
row.push(Number(data[counter][1]));
row.push(Number(data[counter][2]));
row.push(Number(data[counter][3]));
row.push(Number(data[counter][4]));
row.push(Number(data[counter][5]));
row.push(Number(data[counter][6]));
row.push(Number(data[counter][7]));
dataTable.addRow(row);
counter++;
}
var varTable = dataTable.build();
//チャートの作成
var chart = Charts.newPieChart()
.setDataTable(varTable)
.setTitle("高級魚介類の売上")
.setDimensions(650, 550)
.set3D()
.build();
//円グラフを作成する
var app = UiApp.createApplication().setTitle("円グラフテスト");
app.add(chart)
return app;
}
参考URL
Google ガジェットで作る
ソースコード
<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="sample1" />
<Content type="html">
<![CDATA[
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>
Google Visualization API Sample
</title>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
//corechartのパッケージをロード
google.load("visualization", "1", {packages:["corechart"]});
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&single=true&gid=1');
query.send(draw);
}
function draw(response) {
if (response.isError()) {
alert('Error in query');
}
var data = response.getDataTable();
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
//グラフオプションの指定
var options = {
title: '高級魚介類1月の売上',
is3D: true,
chartArea:{left:100,top:30,width:"70%",height:"75%"},
height: 500,
width: 700
};
//グラフの描画
chart.draw(data, options);
}
</script>
</head>
<body style="font-family: Arial;border: 0 none;">
<div id="chart_div" style="width: 900px; height: 500px;"></div>
</body>
</html>
]]>
</Content>
</Module>
ポイント
今回、この円グラフを作るために、違うデータを2つ目のシートに作って挿入してます。
しかし、ここで問題が。これまでのようなURLですと、gidを変えても1枚目のシートが参照されてしまいます。また、gidはシートの増減で歯抜けになったり変わったりするので、扱いに注意です。さて、どうやって2枚目にアクセスするのか?ウェブで公開の際に2枚目のシートだけ公開することもできるのですが、この場合1枚目が今度はアクセスできなくなってしまいます。ということで、2枚目だけ公開の時のURLを使います。今回ですと下のようなURLですと、2枚目だけにアクセスできますし、ウェブで公開は全面公開にしているので、1枚目ももちろんアクセスできます。
違いはsingle=trueと、アンパサンドを使ってgid=1を明確に指定していることです。この時、single=trueがないと、1枚目のシートも出てきてしまい、1枚目のアクセスされてしまうので、このURLの形式でAPIには渡して上げましょう。
また、今回のチャートは円グラフなので、独特のオプション指定となっています。is3Dは最たるもので、3D円グラフにしてくれます。他にもpieHoleで0~1の間で指定すると、ドーナツ型の円グラフが作れます(3Dと共存不可)。なので、今回はソースコードはis3D指定してますが、実際表示されているチャートはpieHoleを0.4で指定しています。
さらに、パイチャートは特性上、すべてのカラムのデータをデータテーブルに入れたとしても、1カラム目の値しか読みに行きませんので、チャートを作る時には、それを意識して、ダイアログで値をもらって使用するカラムを変えるか?それとも、合計値フィールドを用意して、それをデータテーブルに入れるか?を考慮する必要性があります。