2013-11-14 9 views
5

私はiPythonノートをmatplotlibと一緒に使用していますが、imshow()を呼び出すと画像が自動的に表示されることが多いのですが、そのような場合は避けたいときがあります。iPythonノートブック:imshow()で画像を出力しないようにするにはどうすればいいですか?

特に私は非常に大きな配列をループし、ディスクに保存する必要がある要素ごとにmatplotlibの図を生成します。そのフィギュア作成の一環として、imshow()を呼び出して既存のイメージ(私の場合はマップのスクリーンショット)を軸に描画し、後でその上に追加のマテリアルを描画する必要があります。 imshowをプロセスの一部として呼び出すと、iPythonのノートブックに最後のFigureがインラインで表示されますが、どうすればそれを防ぐことができますか?

私のコードは次のようなものになります:関数にこれを移動してみてください、と機能の開始時にpylab.ioff()pylab.ion()へのエンド復帰時に行う

import matplotlib as plt 
fig = plt.pyplot.figure(figsize=(20,20)) 
im2 = plt.pyplot.imread('/some/dir/fancy-map.png') 

# Magic to calculate points, x_min etc. 

fig.clf() 
ax = fig.gca(xlim=(x_min, x_max), ylim=(y_min, y_max)) 
ax.imshow(im2, extent=(4, 4.5746, 42.5448, 43.3791), aspect=1.5) 
raster = ax.imshow(points, vmin = 0, vmax=maxval, extent=(x_min, x_max, y_min, y_max), aspect=1.5, origin='lower') 
fig.colorbar(raster) 
ax.set_title('coordinates plot') 

fig.savefig("fancy-annotated-map.png", bbox_inches=0) 

答えて

3

を:

# Obvs add arguments so you can pass in your data and plot choices. 
def make_img(): 
    pylab.ioff() 

    import matplotlib as plt 
    fig = plt.pyplot.figure(figsize=(20,20)) 
    im2 = plt.pyplot.imread('/some/dir/fancy-map.png') 

    # Magic to calculate points, x_min etc. 

    fig.clf() 
    ax = fig.gca(xlim=(x_min, x_max), ylim=(y_min, y_max)) 
    ax.imshow(im2, extent=(4, 4.5746, 42.5448, 43.3791), aspect=1.5) 
    raster = ax.imshow(points, 
         vmin = 0, 
         vmax=maxval, 
         extent=(x_min, x_max, y_min, y_max), 
         aspect=1.5, 
         origin='lower') 
    fig.colorbar(raster) 
    ax.set_title('coordinates plot') 
    fig.savefig("fancy-annotated-map.png", bbox_inches=0) 

    pylab.ion() 
  1. これは、IPython内でのみ関数を使用していることを前提としています。そうでない場合は、常にpylabがインポートされます。より良いラップをtry ... exceptの周りに使用できるように、その周りに。

  2. は(%または%%機能が%cpasteのように、呼び出します)the template for making your own IPython Magic functionsを見てください。これには、%imnoshowなどのような独自のマジックを作成して、imshowを呼び出す部分だけをラップすることで、出力を表示しなくてもimshowの出力をインライン処理することができます。あなたの質問は一般的なプロットインターフェイスを扱うのではなく、むしろこの具体的なものを扱うので、私はここでこれを実装しようとはしませんが、上記のリンクは、必要な場合に何かを実装するのに十分なはずです。

  3. 別のアプローチは、彼らがロードされるように、そして、そこに独自の特別なプロット関数を配置するなど、独自のインポートおよびヘルパークラス定義の完全ないくつかの特定の.pyファイルを持つなど、IPython configuration environment、独自の設定手順を、従うことです起動時にはIPythonのグローバルスコープで利用可能です。私はいくつかの理由でこれを強くお勧めします:(a)あなた自身のヘルパー関数用の単体テストを実際に書くことができ、望むならIPythonを起動するたびに簡単にテストすることもできます! (b)これにより、より簡単にバージョン管理を行い、頻繁に必要なヘルパ関数のロジックをカプセル化することができます。 (c)あなたは、それを魔法の機能にするか、後でそれをインポートする必要なく、「ただそこにいる」という機能の利益を得る。

+0

完璧、ありがとう! 'pylab.ioff()'を使って終了しましたが、間違いなくiPythonの魔法の機能を使って見ていきます – Robin

関連する問題