2013-03-11 10 views
9

私は、matplotlibを使っていくつかの特別なグラフをプロットするpythonモジュールを変更しています。matplotlibのpylabバックエンドがインラインで動作することを確認するには?

今のところ、このモジュールはすべての数字をファイルとして保存します。

私はipythonノートブックで作業中にモジュールをインポートし、結果が "インライン"であることを確認したいと思います。一方、モジュールがあるときはファイルとしての数字を保存するデフォルトの機能を維持したいと思います他のすべての場合にインポートされます。

だから、モジュールがipythonノートブックにインポートされ、ピラブがインラインで動作しているかどうかをチェックする必要があります。

どうすれば確認できますか?

答えて

12

あなたはとmatplotlibのバックエンドを確認することができます。特にインラインmatplotlibのを確認するには

import matplotlib 
matplotlib.get_backend() 

mpl_is_inline = 'inline' in matplotlib.get_backend() 

注意をIPythonのノートブックで、あなたは常に表示インラインフィギュアことができ、アクティブなmatplotlibバックエンドとは無関係に、

display(fig) 
2

これは私の検索を得た、私は解決策を見つけたと思う。わからないこれは実際に文書化され、あるいは意図したが、それは非常にうまく機能している場合:

get_ipython().config['IPKernelApp']['pylab'] == 'inline' 

get_ipython()はIPythonを実行している場合にのみ定義された方法であることが表示されます。私は現在のIPythonセッションを想定したものを返します。次に、 'IPKernelApp'要素を含む辞書であるconfig属性にアクセスできます。後者は、キーpylabを含む辞書そのもので、文字列は'inline'です。

私は広範囲に試したことはありませんが、私はピラブをインラインで実行していない場合、上記のコード行がFalseと評価されると思います。

ノートブックまたはpylabオプションを実行していないときにKeyErrorが発生するので、それを捕まえて、Pylabインラインでノートブックを実行するには「no」としてください。

最後にget_ipython()NameErrorを投げてもよく、上記と同様に、もちろんIPythonを実行していないことを意味します。

私はこれを最小限にテストしましたが、これを私のIPythonノートブックにインポートしてから、デフォルトのPythonのcmdlineにインポートすると動作するように表示されます。

これがうまくいくかどうかご連絡ください。

+2

この設定のチェックがノートブックサーバは代わりに '%のpylabのinline'と当たりノート基づいて、実行時にアクティブに--pylab inline''で開始されなかった例をキャッチしません。 – minrk

8

どの程度しよう:

try: 
    cfg = get_ipython().config 
    print('Called by IPython.') 

    # Caution: cfg is an IPython.config.loader.Config 
    if cfg['IPKernelApp']: 
     print('Within IPython QtConsole.') 

     try: 
      if cfg['IPKernelApp']['pylab'] == 'inline': 
       print('inline pylab loaded.') 
      else: 
       print('pylab loaded, but not in inline mode.') 
     except: 
      print('pylab not loaded.') 
    elif cfg['TerminalIPythonApp']: 
     try: 
      if cfg['TerminalIPythonApp']['pylab'] == 'inline': 
       print('inline pylab loaded.') 
      else: 
       print('pylab loaded, but not in inline mode.') 
     except: 
      print('pylab not loaded.') 
except: 
    print('Not called by IPython.') 
関連する問題