グラフ描く簡単な環境作っときたいかも

グラフ描くの簡単な環境作っときたいかも。要求は以下の2つ。

  • 手軽にグラフが描ける
  • 手軽にグラフを共有できる

前者は例えばjupyter上でだけ表示みたいなのが嫌な感じ。 後者は例えばGUIで表示とかだけなのは嫌な感じ。

まだ結局一番良いと思える方法は見つかっていない(かなしい)。

今のところの方法

今のところとりあえずグラフの描画にはpyplotを使うという気持ちでいる。

とりあえず表示する場合と共有する場合とで分けていて。全部jupyterで済ませれるならそれ。 そうじゃない場合は以下の方法でやっている。

画像を表示するだけ

import matplotlib.pyplot as plt
plt.style.use('ggplot')

plt.plot([1, 2, 3, 4])
plt.ylabel('y')
plt.show()

line.png

画像を共有する場合

画像を出力してその画像を共有というのが無難な感じそう。

import matplotlib
matplotlib.use("AGG")  # NOQA
import matplotlib.pyplot as plt
plt.style.use('ggplot')

plt.plot([1, 2, 3, 4])
plt.ylabel('y')

dpi = float(plt.gcf().get_dpi())
plt.gcf().set_size_inches(400 / dpi, 300 / dpi)

plt.savefig("images/line-400x300.png", dpi=dpi)

dpiの指定に現在のfigureが持っているdpiを使うのと、rcParamsの中のsavefigのdpiを使うのとどちらが良いのかあんまり分かっていない。

$identify images/line-400x300.png
images/line-400x300.png PNG 400x300 400x300+0+0 8-bit sRGB 10.7KB 0.000u 0:00.000

ただ、gistにuploadするときにはちょっと大変な作業を踏まないといけないのであんまり画像で共有というのが機能しないような気もする。

問題点

問題点は以下の様な感じ。

  • グラフの表示と画像として出力とでコードが変わってしまう
  • 画像として出力してもgist上では楽に共有できない

画像として出力した結果を共有するなら画像サーバー的なものを用意してそこにuploadした後にmarkdown上で参照するという感じが良いのかも。 答えは見つかっていない。

jupyterでやれば良い場合

なんだかんだでgistで共有する場合にはjupyterでやるのが一番ラクな気もする。

import matplotlib.pyplot as plt

plt.style.use('ggplot')

plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')

以下をわすれずに

%matplotlib inline

こういう感じ

問題点

問題点はipynbのレンダリングが遅いこと数秒程度は普通に待たされる。 その後

Sorry, something went wrong. Reload?

とか悲しい感じ(githubやgist上での話)。