plotしたグラフをテーブルに表示したい。
グラフを見比べるには並んでいて欲しい。
pyplotで並べるといまいちだし、Ipyhonだと、なかなかそうなってくれない。
そこでHTMLのtableを利用して並べる事を思いついた。
早速やってみたが、リロードをするとグラフの更新ができない。
色々やってみた結果base64を使って何とかなりました。
IPython.displayを使うと、下のa = 2 を変えてrunをしてもファイル名の登録だけだとリロードしてくれず、代替えでbase64を使用しました。
%matplotlib inline
import matplotlib.pyplot as plt
import numpy
import base64
from IPython.display import HTML
def encode64(filename):
img = open(filename, 'rb')
data = base64.b64encode(img.read())
img.close()
return "data:image/png;base64," + data.decode('utf-8')
a = 2
x = numpy.arange(-3, 3, 0.01)
img = []
for i in [1,2,3,4]:
y = numpy.sin(6.28* x * a * i)
plt.title("freq : " + str(i * a) + "Hz")
plt.plot(x, y)
plt.savefig("tmp.png")
plt.clf()
img.append(encode64("tmp.png"))
html = """
<table>
<tr>
<td><img src="{0}" ></td>
<td><img src="{1}" ></td>
</tr>
<tr>
<td><img src="{2}" ></td>
<td><img src="{3}" ></td>
</tr>
</table>
""".format(img[0], img[1], img[2], img[3])
HTML(html)
最後に
ちょっとトリッキーな力技だけど他の方法が見当たらないので、これで良しにしました。