2017-08-12 16 views
1

ipywidgetsが有効な場合、Jupyter Notebookからプログラムでチェックしたいと考えています。それをどうやって行うのですか? nbextensionsnotebookのモジュールを調べてみましたが、有効な拡張機能を一覧表示する機能が見つかりませんでした。Jupyterノートブック拡張機能が有効になっているかどうかをチェックする方法は?

My NotebookはGitHub上にあり、静的なプロットを提供したいと思います。ユーザーが実際にノートブックを実行していて、ipywidgetsをインストールして有効にしている場合は、インタラクティブバージョンも追加します。

プロットコードは、擬似コードで

# Setup by importing some libraries and configuring a few things 
import numpy as np 
import ipywidgets 
import matplotlib.pyplot as plt 
%matplotlib inline 

# Create two random datasets 
data = np.random.random(15) 
smallerdata = np.random.random(15) * 0.3 

# Define a plotting function 
def drawPlot(): 
    plt.plot(range(len(data)), data, label="random data"); 
    plt.plot(range(len(smallerdata)), smallerdata, 'r--', label="smaller random data"); 
    plt.title("Two random dataset compared"); 
    plt.grid(axis='y'); 
    plt.legend(); 

# Define an interactive annotation function 
def updatePlot(s=0): 
    print("data {0:.2f}, smallerdata {1:.2f}".format(data[s], smallerdata[s])) 
    drawPlot() 
    plt.annotate(s=round(data[s], 2), 
       xy=(s, data[s]), 
       xytext=(s + 2, 0.5), 
       arrowprops={'arrowstyle': '->'}); 
    plt.annotate(s=round(smallerdata[s], 2), 
       xy=(s, smallerdata[s]), 
       xytext=(s + 2, 0.3), 
       arrowprops={'arrowstyle': '->'}); 
    plt.show(); 

で、私はこのような何かを達成したいと思います:コマンドラインから

if nbextensions.enabled('ipywidgets'): 
    slider = ipywidgets.interactive(updatePlot, s=(0, len(data) - 1, 1)); 
    display(slider) 
else: 
    drawPlot() 

を、概念的に類似したコマンドがjupyter nbextension listですが、私はやりたいですこれは実行中のPython環境からのもので、ユーザーがGitHub(またはそれに類似したもの)のNotebookを見ているときにも静的プロットを提供します。

ありがとうございました:)

+0

どのような場合でもプロットを表示し、可能であればウィジェットを表示するのはどうですか? – ImportanceOfBeingErnest

+0

ありがとう@ImportanceOfBeingErnest、概念的には私が心に留めていることです。しかし、私はウィジェットからプロットを再描画しているので、ipywidgetsが有効になっていれば、プロットの2つのコピーが作成されます:最初は静的なもの、次にインタラクティブなものです。これは私が今いる状況です:) –

答えて

1

を私はここに要求されている正確に何を勘違いして、しかし、私は通常のように感じるtry - exceptソリューションが動作します。

import numpy as np 
import matplotlib.pyplot as plt 
%matplotlib inline 

data = np.random.random(15) 
smallerdata = np.random.random(15) * 0.3 

def drawPlot(): 
    plt.plot(range(len(data)), data, label="random data"); 
    plt.plot(range(len(smallerdata)), smallerdata, 'r--', label="smaller random data"); 
    plt.title("Two random dataset compared"); 
    plt.grid(axis='y'); 
    plt.legend(); 

def updatePlot(s=0): 
    print("data {0:.2f}, smallerdata {1:.2f}".format(data[s], smallerdata[s])) 
    drawPlot() 
    plt.annotate(s=round(data[s], 2), 
       xy=(s, data[s]), 
       xytext=(s + 2, 0.5), 
       arrowprops={'arrowstyle': '->'}); 
    plt.annotate(s=round(smallerdata[s], 2), 
       xy=(s, smallerdata[s]), 
       xytext=(s + 2, 0.3), 
       arrowprops={'arrowstyle': '->'}); 
    plt.show(); 

try: 
    import ipywidgets 
    from IPython.display import display 
    slider = ipywidgets.interactive(updatePlot, s=(0, len(data) - 1, 1)); 
    display(slider) 
except: 
    drawPlot() 
関連する問題