🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Matplotlib

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1901閲覧

matplotlibでannotateを順番に表示していきたい

dendendenjirou

総合スコア41

Matplotlib

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/12/03 00:15

現在、matplotlibを用いて円を表示し、その中を矢印が回転するような表示をさせたいと思っています。
簡単に言うと時計のような感じです。

360度の矢印表示はできるのですが、1本ごと順番に表示、前の矢印を消去させることが出来ません。
どなたか、その方法をご教授願いませんでしょうか。

python

1import matplotlib.pyplot as plt 2import matplotlib.patches as patches 3import math 4import time 5 6fig, axs = plt.subplots(figsize = (8, 8)) 7 8axs.grid() 9axs.set_xlim(-2, 2), axs.set_ylim(-2, 2) 10 11c = patches.Circle(xy=(0, 0), radius=2, fc='#e0ffff', ec='#e0ffff') 12axs.add_patch(c) 13plt.show() 14 15x_rad, y_rad = 0, 0 16 17arrow_dict = dict(arrowstyle = "->", connectionstyle= "arc", color= "red") 18 19for i in range(0,360,1): 20 #axs.annotate.clear() 21 rad = math.radians(i) 22 x_rad, y_rad = 2 * math.cos(rad), 2 * math.sin(rad) 23 24 axs.annotate("", 25 xy = (x_rad, y_rad), size = 50, xytext = (0, 0), 26 color = "black", arrowprops = arrow_dict) 27 #time.sleep(0.01) 28 #fig.canvas.draw() 29

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

annotate() は作成した矢印を Annotation オブジェクトとして返すので、for 文の中では Annotation.xy の値を変更し、描画のアップデートをかければいいかと思います。

python

1import matplotlib.pyplot as plt 2import math 3import time 4 5plt.ion() 6 7fig, ax = plt.subplots(figsize=(8, 8)) 8ax.grid() 9ax.set_xlim(-2, 2) 10ax.set_ylim(-2, 2) 11 12ax.add_patch(plt.Circle(xy=(0, 0), radius=2, fc="#e0ffff", ec="#e0ffff")) 13 14arrow_dict = dict(arrowstyle="->", connectionstyle="arc", color="red") 15arrow = ax.annotate( 16 "", 17 xy=(0, 0), 18 size=50, 19 xytext=(0, 0), 20 color="black", 21 arrowprops=arrow_dict, 22) 23 24for i in range(360): 25 rad = math.radians(i) 26 x_rad, y_rad = 2 * math.cos(rad), 2 * math.sin(rad) 27 arrow.xy = (x_rad, y_rad) 28 29 time.sleep(0.01) 30 fig.canvas.draw() 31 fig.canvas.flush_events()

投稿2020/12/03 02:34

tiitoi

総合スコア21956

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

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

dendendenjirou

2020/12/03 05:39

tiitoi様 この度は、返答ありがとうございました。 無事、解決することが出来ました。感謝いたします。 グラフ等を更新するにはインタラクティブモードにするために plt.ion() を使う事、初めて知りました。 また、canvas.flush_events() これも、初めて勉強させていただきました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問