質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Q&A

解決済

1回答

2501閲覧

Python Matplotlib の event.keyの使い方

Deng

総合スコア19

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

0グッド

0クリップ

投稿2021/07/28 07:29

pythonを使いて、複数グラフをkeyのeventで順番に表示させます(動作1)。そして、別のkey eventで(動作2)を飛ばしたいです。下記のは、失敗例です。continueのコメント使わないです。
どうすれば、よろしいでしょうか。教えてください。よろしくお願いします。

python

1import matplotlib.pyplot as plt 2 3def onkey(event): 4 if event.key =='n': 5 plt.close() 6 if event.key =='a': 7 continue 8 9x = [1,2,3,4,5] 10 11y = [[1,2,3,4,5],[5,4,3,2,1],[1.1,2.1,5,3,4],[9,3,1,5,8]] 12 13 14for i in y: 15 fig, ax = plt.subplots() 16 17 ax.plot(x,i) #動作1 18 19 fig.canvas.mpl_connect('key_press_event', onkey) 20 21 plt.show() 22 23 print(i)   #動作2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ArMigELo

2021/07/28 08:51

条件がわからないのでコードがかけませんが、 if文でprint(i)の前に条件を付けるのはどうでしょうか?
Deng

2021/07/28 22:47

ArMigELoさん 説明不足で、申し訳ございませんでした。ありがとうございました。
guest

回答1

0

ベストアンサー

'n'を押したときにはiを表示して次のグラフを表示し、
'a'を押したときにはiを表示せずに次のグラフを表示する。
ということをやりたいなら、以下です。

python

1import matplotlib.pyplot as plt 2 3def onkey(event): 4 if event.key =='n': 5 plt.close() 6 print(i) #動作2 7 if event.key =='a': 8 plt.close() 9 10x = [1,2,3,4,5] 11y = [[1,2,3,4,5],[5,4,3,2,1],[1.1,2.1,5,3,4],[9,3,1,5,8]] 12 13for i in y: 14 fig, ax = plt.subplots() 15 _ = ax.plot(x,i) #動作1 16 _ = fig.canvas.mpl_connect('key_press_event', onkey) 17 plt.show()

n、a、n、nの順に押した場合の結果が以下です。

python

1>>> for i in y: 2... fig, ax = plt.subplots() 3... _ = ax.plot(x,i) #動作1 4... _ = fig.canvas.mpl_connect('key_press_event', onkey) 5... plt.show() 6... 7[1, 2, 3, 4, 5] 8[1.1, 2.1, 5, 3, 4] 9[9, 3, 1, 5, 8]

投稿2021/07/28 14:24

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Deng

2021/07/28 22:46

PPaulさん ありがとうございました。大変助かりました。もし、ご時間がございましたら、”_ = fig.canvas.mpl_connect('key_press_event', onkey)”の前頭構造”_= fig...."に関する解釈資料を教えていただきたいです。勉強したいです。よろしくお願いします。
ppaul

2021/07/28 23:01

私は、Pythonを対話モードで使っているので、fig.canvas.mpl_connect('key_press_event', onkey)のような式を実行すると実行結果が表示されてしまいます。結果を何でもよいので変数に代入すると対話モードでも実行結果を表示しないようになります。実は、表示される結果は変数_に代入されているので、変数_は何もしていないのと同じです。今回は余分な出力を消して出力をわかりやすくするために、これを行っています。 実行結果が表示されない使い方であれば、「_ = 」は消していただいて結構です。
Deng

2021/07/28 23:35

ppaulさん、ご返事ありがとうございました。アンダースコアを理解しました。試したところに、”=”の右辺に” ”(スペース)も必要ようです。スペースはないと以下の警告が表します。 ”MatplotlibDeprecationWarning: Toggling axes navigation from the keyboard is deprecated since 3.3 and will be removed two minor releases later. return self.func(*args)” このスペースをまた理解していないです。
Deng

2021/07/29 00:07

(追伸)もっと試したら、あの警告は、スペースに関係ありません。例題の”a"を押したら、その警告が表すようです。この内容は、本質問と関係ないので、今回の質問を終了させていただきます。ごフォーローありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問