そう、matplotlibならね。

この記事はPython Advent Calendar 2015の記事として書かれたものです.

はじめに

ASCIIしか表示できない環境でもグラフを描画したい,そんな機会はいつどこでも誰にでも巡ってきます. 相手がテキストメール原理主義者であったり, 家にVT100しかなかったり… そんなときでも使い慣れた言語とライブラリでグラフが描ける.そう,matplotlibならね.

デモ

(見づらいのでこちらのリンクを推奨)

種明かし

matplotlibはグラフを構成する要素の配置を担当するフロントエンドと描画を担当するバックエンドの両者が分離されており, 両者をバラバラに開発することが可能になっています. 例えばJupyter notebook上では%matplotlib inlineなどと打つとpylabのAPIを呼び出すだけでグラフが描画されますが, あれもが自前で持っているバックエンドのおかげです.

先日matplotlibのコードを読んでいるとフロントエンドとバックエンドの粗結合性に感動しました. 後者が持つべきメソッドは十数個しかなく, さらに自前で実装すべきものは数個しかありません. コード量自体も少ないのでhackするのは相当楽です.

今回はそのデモとしてmatplotlibで書いたグラフをasciiコードで出力するバックエンドを書いてみました. matplotlibのリポジトリに転がっていたテンプレートを下敷きにしたため自分で書いたのは多分100行ほどです. いやあすごい.

おわりに

matplotlibをhackするのが簡単なのもIPython(現Jupyter)がPythonで実装された一つの要因かもしれません. ちなみにターミナル上で真面目にグラフを描画したい方はPySixelgnuplotなどを使われると良いかと思います.

リンク

http://github.com/domitry/matascii

おまけ1

Rubyでも綺麗なグラフ描けるよ!!!

おまけ2

Enjoy Christmas!