Google Chart APIの限界について質問をいただいたので、実験してみました。

結論から言うと、
  1. 生成できる画像サイズに制限があるので、データ量に制限がなかったとしても表現の問題がある
  2. どうしてもデータ量が多いのであれば、解像度内で表現できるグラフにあわせて、データを加工すれば良い
  3. Google Chart APIに制約は色々あるが、Web用途で表示できるグラフとしては十分なスペックに設定されている
という話です。

Google Chart API側の限界について:

  • おおよそラベルなど抜きにしてトータル1000個くらいのデータまで行けるようです。
    • X軸が等間隔の単純な折れ線グラフであれば、Y座標データだけ送信すればよいので、1000個のポイントがプロットできます。
    • 平面へ自在にプロットする場合はXY座標データが必要なので、大体500個のポイントが打てる、ということのようです。
これ以上のデータを送信しようとすると、
Googleのサーバ側から"400 Bad Request"エラーコードが返って来ます。

ブラウザで表示する際の限界について:

  • imgタグにURLを埋め込む場合は、Internet Explorer 6の場合、あまり長いURLを入れると切られてしまいます。
    • マイクロソフトの情報によると2083バイトまでしか送信できません
    • 1000個のデータを送信する際に生成されるURLは、2060バイト程度でしたので、ひょっとすると、Google Chart APIの限界値の設定はこうした主要ブラウザのURLの限界にあわせて設定されているのかも知れません。

これで十分なのか?という考察:

実はGoogle Chart APIの制約としてもうひとつ、画像サイズがあります。
これは面積にして300,000pixelまで、と定められており、その範囲で自由にwidth, heightを決定できます。
最近のディスプレイの解像度を考えると、Web用途としては十分な画像サイズだと思います。

そう言う意味では、解像度以上のデータをプロットしようとしても実際には混み入ってしまい、うまく表現することはできないでしょう。
なので目的によってはデータ数より解像度の方が問題かもしれません。

純粋にデータ量が問題になるのであれば、解像度にあわせてデータ数を加工することになりそうです。

検証に使ったコード:

require 'rubygems'require 'gchart'
g = GChart.line(:data=>(1..1000).map{|i| rand(i)},
                :width=>600, :height=>500)
g.write("ex.png") # Image Data
g.to_url.length   # URL Length

試しに貼ってみる:

超長いURLをimgタグのsrcに指定しています。
ブラウザを変えて表示できるかどうか試してみてください。
FirefoxとIEはいけたので大丈夫だと思います。
※ただ、ブログのレイアウトがおかしくなるので、表示サイズは50%にしてあります
Google Chart API - Example

試してないこと:

  1. 今回使ったのはデータの精度を重視したExtended Encodingなので、もっと荒いSimple Encodingだともっと行けるかもしれない
  2. Line chartしか試していないので、その他は違うかも知れない
  3. labelやlegendを含めた限界とか、そう言うのも試してない