アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

EmacsでGoogle Chart

こんにちは、chibaです。
今回もネタがないのでEmacsで遊んでいたネタを。
Googleは、便利にグラフを書けるAPIであるGoogle Chart APIというのを提供しています。
URLを指定するだけで、グラフが書けたり、QRコードが書けたり色々便利なものですが、数値のリストからスタックされた棒グラフを書いてみようと思ったので、ちょっと遊んでみました。

(defun* gchart-stack-bar-chart-url (data &key (style :horizontal))
  (let ((len (length data)))
    (concat
     "http://chart.apis.google.com/chart?"
     "cht=b" (case style
               (:horizontal "hs")
               (otherwise "vs"))
     "&chd=t:"
     (let* ((totals (mapcar (lambda (x)
                              (apply #'+ x))
                            data))
            (max (apply #'max totals))
            (to-string (lambda (x) (format "%s" x))))
       (mapconcat
        to-string
        (mapcar
         (lambda (x)
           (mapconcat
            to-string x ","))
         (apply #'mapcar*
                #'list
                (mapcar
                 (lambda (x)
                   (mapcar
                    (lambda (y)
                      (format "%.1f"
                              (* (/ 100 max) y)))
                    x))
                 data)))
        "|"))
     "&chco=ff0000,00ff00,0000ff"
     "&chs=350x"
     (int-to-string (* len 28)))))
(let ((data '((10 20 30)
              (3 50 1)
              (1 2 3)
              (33 33 33)
              (5 6 7)
              (33 33 33)
              (3 3 9))))
  (browse-url (gchart-stack-bar-chart-url data)))

これで、

のようなグラフが書けます。
タイトルも付けられるようですが、飽きてしまいました
Emacs便利です。