matplotlibのグラフをインタラクティブなまま保存する

savefig() で画像に保存しちゃうと、矩形拡大とかができないし、
show() しちゃうと閉じたら消える。インタラクティブなまま保存できたらよいのにと思って調べてみた。

https://stackoverflow.com/questions/4348733/saving-interactive-matplotlib-figures
https://stackoverflow.com/questions/29160177/matplotlib-save-file-to-be-reedited-later-in-ipython

MATLABにはそういう機能が既にあるみたいですね。まぁ欲しくなるよね。
matplotlibの場合、figureオブジェクトをpickleで保存すればいいみたいです。

日本語でも情報ありました。このエントリを書く意味がほとんど無くなってしまった。
http://kuroneko0208.hatenablog.com/entry/2014/07/28/161453

バッチファイルを作っておいて、pickleファイルを放り込めばすぐに見れる、みたいな感じにしておけばいいのかなー。
pngでもpickleでも保存しておいて、中身を詳しく見たくなったらインタラクティブモードでも見れるみたいな形にしておくと便利かな

保存する側

#! /usr/bin/python2.7
# coding: utf-8

import matplotlib.pyplot as plt
import pickle

xs = range(10)
ys = [x**2 for x in xs]

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot(xs, ys)

#plt.show()

with open('figure_image.pkl', 'wb') as ofs:
    pickle.dump(fig, ofs)

表示する側

#! /usr/bin/python2.7
# coding: utf-8

import matplotlib.pyplot as plt
import pickle
import sys

filename = 'figure_image.pkl'
if len(sys.argv) > 1:
    filename = sys.argv[1]

with open(filename) as ifs:
    fig = pickle.load(ifs)
    plt.show()
rem plt_viewer.bat
cd %~dp0

python plt_viewer.py %1

pickleファイルをドラッグ&ドロップで放り込むと、グラフをpickleでリストアして表示する。