web-dev-qa-db-ja.com

jupyterノートブックのcanvas.mpl_connect

Test.pyに次のコードがあります。

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(np.random.Rand(10))

def onclick(event):
    print('button=%d, x=%d, y=%d, xdata=%f, ydata=%f' %
          (event.button, event.x, event.y, event.xdata, event.ydata))

cid = fig.canvas.mpl_connect('button_press_event', onclick)

コマンドラインで「python test.py」によってtest.pyを実行すると、「button =%d、x =%d、y =%d、xdata =%f、ydata =%f」がクリックされると印刷されますプロット

ただし、結果はjupyterノートブックには印刷されません。

それを修正する方法?

前もって感謝します!

14
Meng

Jupyter Notebookで使用するバックエンドによって異なります。

  • インラインバックエンドを使用する場合(つまり、%matplotlib inline)、プロットは単なるpng画像であるため、インタラクティブ機能は機能しません。
  • ノートブックバックエンドを使用する場合(つまり、%matplotlib notebook)インタラクティブ機能は機能しますが、問題は結果をどこに印刷するかです。したがって、テキストを表示するには、次のように図に追加します。

    %matplotlib notebook
    import numpy as np
    import matplotlib.pyplot as plt
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.plot(np.random.Rand(10))
    text=ax.text(0,0, "", va="bottom", ha="left")
    
    def onclick(event):
        tx = 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f' % (event.button, event.x, event.y, event.xdata, event.ydata)
        text.set_text(tx)
    
    cid = fig.canvas.mpl_connect('button_press_event', onclick)
    

enter image description here