こんにちは、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便利です。
■