ライブラリ:pygooglechart

Pythonの「 pygooglechart 」というライブラリについてご紹介します。

from pygooglechart import *

Gooleが提供しているサービスのひとつに「Google Chart」というものがあります。HTTPリクエストでグラフを生成できるというすてきサービスなのですが、そのGoogle ChartのPython用ラッパーがこの pygooglechart です。

pygooglechart を使えば、ローカル環境にプロット用のツールが入っていなくても、インターネット環境さえあればほんのちょっとのコードでグラフを生成することができます。

以下、使い方をざっと見ていきます。

  • 基本的な使い方
  • 折れ線グラフ
  • 棒グラフ
  • 散布図
  • 円グラフ
  • QRコード
  • 基本的なメソッド

基本的な使い方

まずはもっとも基本的な使い方から。大きな流れは次のとおりとなります。

  • ライブラリの読み込み
  • インスタンスの生成
  • プロットデータの追加
  • 結果の取得
# ライブラリの読み込み
from pygooglechart import Chart
from pygooglechart import SimpleLineChart
from pygooglechart import Axis

# チャートインスタンスの生成
Width = 400
Height = 250
chart = SimpleLineChart(Width, Height)

# プロットデータの追加
chart.add_data([1, 5, 3, 8, 11])
chart.add_data([9, 2, 4, 8, 13])

# 結果の取得
print chart.get_url()  # グラフ画像取得用のURLを表示
chart.download("basic.png")  # 実際に生成されたグラフ画像のダウンロード

上記スクリプトを実行すると、ターミナルにURLが表示され、 basic.png が実行ディレクトリに生成されます。

basic

基本のこの型さえ使えるようになれば、あとは線種やタイトル、凡例などを設定するオプションを都度覚えるだけです。べんり!

以下、さまざまなタイプのグラフを見ていきます。

折れ線グラフ

折れ線グラフの生成には SimpleLineChart というクラスを使用します。

# ライブラリの読み込み
from pygooglechart import Chart
from pygooglechart import SimpleLineChart
from pygooglechart import Axis

# インスタンスの生成
Width = 400
Height = 250
chart = SimpleLineChart(Width, Height)

# プロットデータの追加
chart.add_data([1, 5, 3, 8, 11])
chart.add_data([9, 2, 4, 8, 13])

# 各種オプションの設定
# 折れ線の色の設定
# 16進数表記で与える
chart.set_colours(['333333'])

# 線種を設定
# index は系列の番号 thickness は太さ
chart.set_line_style(index=0, thickness=5)
chart.set_line_style(index=1, thickness=10)

# X軸/Y軸ラベルの追加
# 第1引数に位置を、第2引数にラベルを渡す
# 渡したリストの各要素が自動的に均等配置される
chart.set_axis_labels(Axis.BOTTOM, [0, 1, 2, 3])
chart.set_axis_labels(Axis.LEFT, ["low", "middle", "high"])

# グラフのタイトルの追加
chart.set_title("line chart")

# 結果の取得
chart.download("line.png")

line

棒グラフ

棒グラフの生成には GroupedVerticalBarChart というクラスを使用します。

# ライブラリの読み込み
from pygooglechart import GroupedVerticalBarChart

# インスタンスの生成
Width = 400
Height = 250
chart = GroupedVerticalBarChart(Width, Height)

# プロットデータの追加
chart.add_data([1, 2, 3, 4, 5, 6])
chart.add_data([1, 25, 9, 16, 36, 4])

# 各種オプションの設定
# 系列ごとの色の設定
chart.set_colours(['333333', 'cc3333'])

# 系列ごとの凡例の追加
chart.set_legend(['x', 'y'])

# 結果の取得
chart.download('bar.png')

bar

ちなみに、折れ線グラフ用のクラスには GroupedVerticalBarChart のほかにも次のようなクラスが用意されています。

  • StackedHorizontalBarChart
  • StackedVerticalBarChart
  • GroupedHorizontalBarChart
  • GroupedVerticalBarChart

棒グラフの伸びる向きや複数の系列をどう表すか、というところがクラスごとに異なる点です。詳細は公式サイトをご覧ください。

散布図

散布図の生成には ScatterChart というクラスを使用します。

# ライブラリの読み込み
from pygooglechart import Chart
from pygooglechart import ScatterChart
from pygooglechart import Axis
import random

# インスタンスの生成
# x_range y_range はX軸/Y軸の範囲を設定するためのオプション
Width = 400
Height = 250
chart = ScatterChart(Width, Height,
                     x_range=(0, 100), y_range=(0, 100))

# プロットデータの追加
# 最初のデータはX軸上の位置 2番目のデータはY軸上の位置 3番目のデータは各点のサイズを表す
NUM_OF_POINTS = 30
chart.add_data([random.randrange(100) for _ in range(NUM_OF_POINTS)])
chart.add_data([random.randrange(100) for _ in range(NUM_OF_POINTS)])
chart.add_data([random.randrange(1, 30) for _ in range(NUM_OF_POINTS)])

# 各種オプションの設定
# ドットの色の設定
chart.set_colours(['333333'])

# X軸/Y軸目盛りの追加
# 第1引数に軸を 第2引数に加減を 第3引数に上限を渡す
# 目盛り幅は自動で与えられる
chart.set_axis_range(Axis.BOTTOM, 0, 100)
chart.set_axis_range(Axis.LEFT, 0, 100)

# 結果の取得
chart.download('scatter.png')

scatter

円グラフ

円グラフの生成には、 PieChart2D というクラスを使用します。

# ライブラリの読み込み
from pygooglechart import PieChart2D

# インスタンスの生成
Width = 500
Height = 250
chart = PieChart2D(Width, Height)

# プロットデータの追加
chart.add_data([10, 10, 30, 50])

# オプションの設定
# 各データにラベルを追加
chart.set_pie_labels([
    'ハンバーガー',
    'チーズバーガー',
    'フィレオフィッシュ',
    'ポテト',
    ])

# 結果の取得
chart.download('pie.png')

pie

ちなみに、3Dの円グラフを生成する PieChart3D というクラスも用意されています。

QRコード

QRコードの生成には、 QRChart というクラスを使用します。

# ライブラリの読み込み
from pygooglechart import QRChart

# インスタンスの生成
Width = 250
Height = 250
chart = QRChart(Width, Height)

# QRコードに埋め込むデータの追加
chart.add_data('http://www.google.co.jp')

# 結果の取得
chart.download('qr.png')

qr

この他にもさまざまなグラフが用意されていますが

  • ライブラリを読み込んで
  • ***Chart というクラスのインスタンスを生成して
  • プロットデータを追加して
  • 各種オプションを設定して
  • 結果を取得する

という基本の流れは共通ですので、このあたりをひととおり身につけておけば、ちょっとしたときに使えて便利かと思います。

最後に、ここまでのおさらいも兼ねて使用頻度の高そうなメソッドを見てみます。

基本的なメソッド

add_data(データ系列を表すリスト) プロットしたいデータを追加するためのメソッドです。データをリスト形式で渡します。

set_colours(16進数表記で色を表す文字列のリスト) 系列の色を設定するためのメソッドです。16進数表記で与えます。複数の系列がある場合は、リストで与えます。

set_title(文字列) グラフタイトルを追加するためのメソッドです。

set_legend(文字列のリスト) 各系列を説明する凡例を追加するためのメソッドです。

setaxislabels(Axis.BOTTOMなど, 文字列のリスト) X軸やY軸にラベルを追加するためのメソッドです。多くの場合は、第1引数に Axis.BOTTOM か Axis.LEFT を、第2引数にラベルのリストを渡します。

setaxisrange(Axis.BOTTOMなど, 下限値, 上限値) X軸やY軸に目盛りを追加するためのメソッドです。

xrange = (下限値, 上限値) yrange = (下限値, 上限値) X軸やY軸の表示範囲を決めるためのメソッドです。デフォルトではすべてのデータが含まれる範囲が自動的に設定されるので、あえてこれを変えたい場合に使います。

get_url() 結果として生成されたグラフ取得用のURLを返すメソッドです。

download(ファイル名) get_url のURLに実際にアクセスして取得できるグラフ画像を保存するためのメソッドです。ファイル名を渡します。

以上です。

インストール

pip が入っていれば、pip install でのインストールが可能です。

$ pip install pygooglechart

GitHubのリポジトリにはいくつか動くサンプルが入っているので、感触をつかみたい場合には一度そちらで試してみることをおすすめします。

参考