Google Apps Scriptでピラミッドグラフを作ってみた【GAS】
社内の年齢層別の比率を出したり、また人口統計で有名なあのグラフを作るというのは、結構面倒です。そもそも、標準でピラミッドグラフというものを作る機能は、どのスプレッドシートでも用意されているわけではないので、積み上げ横棒グラフに色々手間を書けて実現してるのが現実です。
そのピラミッドグラフをGoogleスプレッドシートで実現しようというのが今回のテーマ。スプレッドシート連携なので、予めvlookupやsum関数などで社内の人事情報などから集計しておいたものを利用します。今回は総務省の人口統計データをそのまま利用していますが、他にも年齢別だけでなく、色々なシーンでこの手のピラミッドグラフは役に立つのではないでしょうか?
図:日本の少子化を表すときにはよく目にします
使用するクラスやメソッド・材料
- HTML ServiceのcreateHtmlOutputFromFileメソッド
- Class EmbeddedBarChartBuilder
- Google Visualization API
- 今回使用するスプレッドシート
実行結果
スプレッドシートを開き、上部にある「▶チャート表示」メニューの中の【ピラミッドグラフを表示】を開くとスプレッドシート上のデータをVisualization APIを使用してピラミッドグラフで表示します。グラフだけ確認する場合にはこちらをクリックすると開きます。
また、【ピラミッドグラフを挿入】を開くと、スプレッドシートのgraphシートへグラフを挿入します。ただし、このコマンドの場合以下の問題点があります。
- Visualization APIと違い、vAxis(縦軸)のタイトルがバグで反映しません。手動で入れる分には入れる事が可能です。
- Visualization APIと違い、hAxis(縦軸)のDirectionの-1(メモリ反転)が反映しません。マイナス値のまま表示されてしまいます。
ずいぶんと長い間この問題は解決されていないようです。
ソースコード
GAS側コード
- insertPyramid関数がグラフを生成して挿入するコードです。但し、バグにより不完全です。
- chartman関数がVisualization APIを利用してグラフを生成します。こちらは素直に動作します。
HTML側コード
- Visualization APIで生成する場合に使用するHTML側のコードです。
- 現在は、ダイアログ上でしか表示ができませんが、getBlobで取得し、GAS側へ渡せれば画像として貼り付けは可能になると思います。
ポイント
- 用意するデータの片方(このグラフの場合、女性の人口数)は、マイナス値で作成すること。
- setStacked / isStackedで積み上げグラフとして指定すること。これをやらないと、男女の棒が平行にならないで互い違いになるので汚くなる。
- vAxisのdirectionオプションで、-1を指定することで、一番下が0才からのスタートになる。
- hAxisのformatオプションで、セミコロンを指定することで、男女両方の値はプラス値で表示される。同時にNumberFormat側でもpatternオプションでセミコロンを入れておく。これで完璧。
こんにちは、記事を参考にグラフを作成させていただいたのですが、系列名が”男””女”のまま変わらずに困っています。表から読み込んだデータは違う名前になるのですが、どうしても表示が変わりません。修正方法をご存知でしたら教えて下さい。
挿入してると思いますが、挿入の場合、既存のグラフの下に挿入されていますよ。
更新をしたいなら、既存のグラフをまず削除してください