私は、赤色または緑色の三角形と四角形(「trisq」と呼ばれる)を生成する関数を持っています。私の目標は、私の描画関数上でループを実行することによって、同じプロット上にこれらの図形を並べることです。matplotlibのサブプロットを管理し蓄積する
私は複数の図形を描画し、その上でplt.show()を呼び出すことができますが、それ以降は空白の出力を与えるので、より多くの図形を追加することはできません。
私の問題は、サブプロットコマンドを制御する方法がわからないことだと思います。どのように間違っているのか、コードの私のインラインコメントを見てください。これを行う最もクリーンな方法は何でしょうか?ありがとう!
(Btw、これは初めての投稿です。私の質問は基本的だと思いますが、少なくとも私は明確な方法でそれを提出してくれることを願っています)。
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
fig, ax = plt.subplots()
def trisq(points):
inf = 20
plt.xlim(-inf, inf)
plt.ylim(-inf, inf)
plt.gca().set_aspect('equal', adjustable='box')
ver = np.array(points)
polygon = Polygon(ver, True)
patches = []
patches.append(polygon)
if len(points) == 3:
color = 'red'
elif len(points) == 4:
color = 'green'
p = PatchCollection(patches, color = color,cmap=matplotlib.cm.jet, alpha=0.4)
ax.add_collection(p)
trisq([(4,18),(6,16),(5,-1),(-5,9)]
trisq([(4,-8),(1,7),(15,9)])
# this works as expected
plt.show()
trisq([(4,8),(12,3),(0,0),(1,9)])
# but this one returns a blank plot
plt.show()
更新: 私の具体的な質問がある:どのように私はそれに多くの要素を追加し、上記の文脈で再びそれを示し、おそらくループ内で繰り返し、その後、グラフを表示していますか?明らかに、plt.show()は一度だけ呼び出され、継続的に呼び出されることはありません。
あなたの返信ありがとう、ImportanceOfBeingErnest!私はコレクションを機能に移しました(ちょうどコピーに欠けてしまいました)。私の目標はループを作り、ループの各反復で、私のtrisq関数を一度呼び出してそこに結果を表示し、短い休止時間を表示することで、すべてのことをするのではなく、三角形と四角形のセルの配列の成長を見ることができます一度にそれを表示することができます。あなたが指摘したように、plt.show()が呼び出されると、イメージはリセットされます。 – Lindohopper
アニメーションの使用を検討してください。 – ImportanceOfBeingErnest