@xshangtiao (syu kami)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

python matplotlibで描いたグラフ上の座標を取得する方法

下記のコードを実行してもグラフが表示されるだけであってクリックしても座標が表示されません。座標が表示されるよう解決策を教えてください。よろしくお願いします。

コード

import matplotlib.pyplot as plt
import numpy as np

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

fig.show()

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)

0 likes

2Answer

  1. そのコードで合っていますか?最後に plt.show() を呼ばないと何も表示されないのですが。
  2. plt.show() を呼ぶようにしてコードを実行したところ、グラフのウィンドウが開き、クリックすれば座標が表示されました。座標はグラフ上ではなくターミナルに文字列で出力されます。グラフ上に表示されると勘違いしていませんか?

図の下部にテキストを配置するには onclick() をこうすればよさそうです。

def onclick(event):
    # 前回配置したテキストを削除
    for t in fig.texts:
        t.remove()
    # テキストを配置
    text = 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f' % (
        event.button, event.x, event.y, event.xdata, event.ydata)
    fig.text(0, 0, text, fontsize=10)
    # 図を再描画
    fig.canvas.draw()
0Like

Comments

  1. @xshangtiao

    Questioner

    matplotlibでやっている場合ターミナル的なとこがないのですが、その場合は、表示されないのでしょうか?
  2. 今のままでは表示されません。図にテキストを描画する方法はあります。やり方を回答の本文に追記しました。
  3. @xshangtiao

    Questioner

    今onclickの内容を上記のものにしましたが変化がございません、matplotlibではできないのでしょうか?
  4. スクリプトを実行する環境によると思います。 macOS, Python 3.8, matplotlib-3.3.2 で、コマンドラインから実行して動くことは確かめました。もしかして Jupyter などのインタラクティブな環境を使っていますか?
  5. 前回の質問でも指摘されていることですが、実行環境やライブラリのバージョンなどはなるべく詳細に書いてください。また Python のコードはインデントが重要なので、コードを貼り付けるときは Markdown のコードブロック記法をちゃんと使ってください。
  6. @xshangtiao

    Questioner

    かしこまりました。バージョン等を記載するようにします。
    おっしゃられている通り、Jupyter にてやっておりますがその場合は難しいのでしょうか?
  7. Jupyter Lab に ipympl を導入すれば可能です。 https://github.com/matplotlib/ipympl
    以下のコマンドでインストールできます。

    $ pip install ipympl
    $ jupyter labextension install @jupyter-widgets/jupyterlab-manager
    $ jupyter lab build

    インストールした後、コードの1行目に
    %matplotlib widget
    を追記して実行すればインタラクティブなグラフが表示されます。
  8. @xshangtiao

    Questioner

    ごめんなさいjupyter notebook でやっているのですが上記のコードを実行したのですが、シンタックスエラーがでてしまったのですが、jupyter notebookでもこちらのコードでよろしいのでしょうか?
  9. @xshangtiao

    Questioner

    できましたありがとうございます。

Your answer might help someone💌