nokの雑記

技術的な内容にしようと思ったけど無理でした。

matplotlibのfigureオブジェクトをpickleで再利用しようとしてハマった話

備忘録がてら……

tl;dr
pickle化するならfig.show()の前にやる.

参考 stackoverflow.com

やりたかったこと

matplotlibのfigオブジェクトをpickleでダンプする → あとで読み込んで再利用する
(一応plt.show()のウィンドウで拡大縮小できるし,軸いじったりしたいし)

やったこと&おきたこと

やったこと

(i)python3.5.2(Anaconda; win32)で試したコード

スクリプト1

import matplotlib.pyplot as plt
import pickle

fig = plt.figure()
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)

ax1.plot([1,2,3],[3,2,1])
ax2.plot([1,2,3],[1,2,3]) 

fig.show()

# あとで使うために保存
with open("./myfig.pkl", "wb") as f:
    pickle.dump(fig, f)

スクリプト2

import matplotlib.pyplot as plt
import pickle

# スクリプト1で保存したものを読み込み
with open("./myfig.pkl", "rb") as f:
    fig = pickle.load(f)

fig.show() # スクリプト1と同じものが表示されるはず

おきたこと

ipythonで順番に打ち込んでいくと出てくるエラーはこちら.まあとにかく表示できない.

In [4]: fig.show()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
C:\Users\hoge\Anaconda3\lib\site-packages\matplotlib\figure.py in show(self, warn)
    380         try:
--> 381             manager = getattr(self.canvas, 'manager')
    382         except AttributeError as err:

AttributeError: 'NoneType' object has no attribute 'manager'

対処

pickle化をfig.show()の前に行うだけ.スクリプト1は以下のようになる.

import matplotlib.pyplot as plt
import pickle

fig = plt.figure()
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)

ax1.plot([1,2,3],[3,2,1])
ax2.plot([1,2,3],[1,2,3]) 

# fig.show()の前に保存する!
# あとで使うために保存
with open("./myfig.pkl", "wb") as f:
    pickle.dump(fig, f)

fig.show()
P.S.

今回の図はこんな感じでした. f:id:nok0714:20170413140253p:plain

記事を書いていない間に買ったものリスト

年末から実験だとか海外出張だとか学会だとかで忙しくてまったく記事を書いていませんでした。許せ自分。

ということで最近買ったものは主に……あんまり買い物もしてなかったですね。これで記事を書けるといいですね。

  • Pebble 2
    Kickstarterでオーダーしていたものが届きました。ライムカラー。きたきたーと喜んでいたらFitbitに買収されて無事死亡。 f:id:nok0714:20170325121709j:plain

  • MacBook Pro 15
    最近一番の出費。でかい画質いい動きいいで素晴らしい。 f:id:nok0714:20170325121734j:plain

Moto Zを買った

追記: デレステ端末としてMotoZを検討している方がいたらオススメしないので他の端末をオススメします
追記その2: デレステがAndroid7における音ズレ問題に正式に対処したので↑の追記を取り消します

久々のまとも記事ですよ-!

長年連れ添った(?)Nexus5くんの調子がおかしいので買ってしまいました。

背景

 Nexus5くんが死んでしまいました。具体的な症状は以下のとおりです。

  • スリープからの復帰時に電源ボタンを押すと二度押し扱いになってカメラが起動
  • カメラアプリを起動すると「カメラに接続できません」と表示されカメラ使用不能
  • 特定のアプリ起動時に本体が再起動

カメラが起動できねえ!と思って電源を切って入れたらGoogleロゴ無限ループに突入してしまいました。

後継機選定

 Pixelの国内販売がまだまだなので+高いのでGoogle系以外で後継機を選ばねばなりません。条件はあまりありません。

  • ZTE Axon7: スペックと値段が魅力。ランチャーが気に入らない+ソフトウェア面のサポートが不安
  • Motorola Moto Z: ほぼ素のAndroidがほしいならこいつだよなという感じ。スペックは見劣りしないが、ヘッドホンジャックはない。
  • Motorola Moto Z Play: バッテリがZよりはるかに大きい。ヘッドホンジャックもある。ただし重いし、性能が劣る。

こんな感じでした。結局プレーンに近いAndroidがほしかったので結局MotoZです。某海外通販サイトで6万円程度でした(この記事を見て海外通販や並行輸入品を購入し、不都合が生じた際に責任は取れませんのであしからず)。国内販売価格の9万円はどう考えてもぼったくりでは?

ここからファーストインプレ

Overall

 届きました。主なスペックは公式サイト見ろって感じですが僕の手元に来たUKモデルはこんな感じ。

パーツ種別 スペック
Chipset SnapDragon820 1.8GHz
Memory 4GB
Storage 32GB + microSD
Display 5.5inch 2560x1440 AMOLED
Battery 2600mAh
Camera 13MP(Rear)/5MP(Front)
Other 指紋認証センサ

ちなみに国内版ではストレージが64GBになってDSDS(Dual SIM Dual Stand-by)に対応します。国内版の公式サイトはこちら↓

www.motorola.co.jp

箱には本体とACアダプタ(15W給電!)に加え、USB-C to 3.5mmヘッドホンジャック変換コネクタが入っています。さらに驚くことに背面カバーとプラのバンパーも入っていました。ケース買わなくてすむぜ!

 実はMoto Zシリーズには変身機能というか変形機能というか、男の子心をくすぐる機能が付いています。背面にオプションを付けることでバッテリ容量を増やしたり、カメラを強化したり、スピーカーを強化したり、果てはプロジェクタにもなります。Moto Modsという名称です。詳しくは下のリンクを見てもらえれば。おまけでついてきた背面カバーもこれの一種で、拡張機能はいらない、着せ替えをしたい人向けのものになります。

japanese.engadget.com

Nexus5から乗り換えて

 まあ色々感想ありますが。大きくはこんなところです。浦島太郎みたいな気分で使っています。

  • 画面が綺麗。有機ELの発色には驚くべきものがあります。下手するとけばいですが、設定で狭めの色域にも変更可能です。
  • カメラは実用に足る。Nexus 5のカメラはお世辞にもいいとは言えませんでしたが、Moto Zのカメラは色味がおかしいとかフォーカスが合わないとかそういうことはありません。
  • 速い。SD820は伊達じゃありません。動作がもたついている感もないし、ポケモンGoも一瞬で起動します。
  • でかい。片手での操作は無理ですね。外で使っていると落としそうで怖いです。
  • 軽い。5.5インチの端末とは思えません。裸だとiPhone6sと変わりません(Plusではない!)。
  • 薄い。ぺらっぺら。おまけでついてきたケースとカバーをつけてもなお薄いです。

一週間ほど使って

 出張の合間に移行作業をしてまた出張ということで出張先でも使ってみて一週間、こんな感じです。

  • バッテリが持つ。Nexus 5との比較になってしまいますが、バッテリが全然減りません。スリープ中のDozeがちゃんと動いているっぽいですね。Ingressをしつつ歩き回っても減りは遅いのでまる一日充電なしでなんとかなりそうです。
  • Moto Displayが結構便利。ディスプレイに手をかざすと時刻と通知を簡易表示してくれる機能があるのですが、どのアプリから通知が来ているかを確認する程度ならこれで済みます。
  • ひねってカメラ起動も結構便利。振ってライト起動も結構便利。ほぼ素ともいえるMoto Zに入っている数少ないプリインアプリ"Moto"で設定できるジェスチャショートカットです。おぼえるといとロック画面を呼び出さなくて済むので早い早い。
  • 指紋認証部をホームボタンと間違える。iPhoneでホームボタンがある位置に指紋センサがありますが、ホームボタンとときどき間違えます。ただ、指紋センサは常時稼働していて、ディスプレイ消灯時でも触れば一気にロックを解除してくれます。ロック解除状態で指紋センサを長押しすると逆にロックしてくれたり、便利に使えます。でもやっぱり間違えます。
  • USB-C->3.5mmジャック変換はやっぱりけっこう面倒。手間が増えるし充電と排他になってしまいます。両方使えるアダプタの販売はまだありません。そもそもUSB-C->3.5mmジャック変換ケーブルすら純正の販売がない。

総合

 当然以前使っていたNexus 5よりはるかに進化していて大満足です。もたつきもないし、画面も広いし、満足しなくてどうするんだという感じです。いまだ謎なポイントはソフトウェアアップデートどうなるのな部分とModsほかに出るのな部分でしょうか。

P.S.

 ぬがーが降ってきました。

起動アニメがかっこいい……