2017-06-25 3 views
0

私は、赤色または緑色の三角形と四角形(「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()は一度だけ呼び出され、継続的に呼び出されることはありません。

答えて

0

Plt.show()には有効な数字が表示されます。 plt.show()への最初の呼び出しの後では、アクティブな数字はもうありません。

残念ながら、実際の目標が何であるかについての質問は不明です。

最後にplt.showを1回だけ呼び出すことができます。間に新しい図を作成することもできます。

コレクションをtrisq関数内に追加してください。

+0

あなたの返信ありがとう、ImportanceOfBeingErnest!私はコレクションを機能に移しました(ちょうどコピーに欠けてしまいました)。私の目標はループを作り、ループの各反復で、私のtrisq関数を一度呼び出してそこに結果を表示し、短い休止時間を表示することで、すべてのことをするのではなく、三角形と四角形のセルの配列の成長を見ることができます一度にそれを表示することができます。あなたが指摘したように、plt.show()が呼び出されると、イメージはリセットされます。 – Lindohopper

+0

アニメーションの使用を検討してください。 – ImportanceOfBeingErnest

関連する問題