2017-11-29 8 views
0

ここは私の問題です。複数の人物で単一のアーティストを配置できません。

私は、円のリストをプロットする関数を作成します。 私の円C1を最初に円C2でプロットし、C3でプロットしてC40までプロットする必要があります。

import matplotlib.pyplot as plt 
from matplotlib.patches import Circle 

def plot_circle(Liste_circles): 


    fig = plt.figure(figsize=(5,5)) 
    ax = fig.add_subplot(111) 

    # On définie un fond blanc 
    ax.set_facecolor((1, 1, 1)) 

    ax.set_xlim(-5, 15) 
    ax.set_ylim(-6, 12)  

    for c in Liste_circles: 
     ax.add_patch(c) 

    plt.show() 

は今、私はC1を作成:

C1=Circle(xy=(3, 4), radius=2, fill=False, color='g') 

アン最終的に私はそれをプロットしてみてください。

C1=Circle(xy=(3, 4), radius=2, fill=False, color='g') 
C3=Circle(xy=(7, 2), radius=4, fill=False, color='b') 
plot_circle([C1,C3]) 
を:

RuntimeError: Can not put single artist in more than one figure

私が作ることができますが、それが実行して働いていた:
は、最初のプロットは働いた:

C2=Circle(xy=(6, 3), radius=4, fill=False, color='b') 
plot_circle([C1,C2]) 

もう一つは失敗:エラーと

C3=Circle(xy=(7, 2), radius=4, fill=False, color='b') 
plot_circle([C1,C3]) 

毎回C1を再作成せずに、サークルC1を40の他の円でプロットする方法はありますか? (私のプログラムは複雑なアルゴリズムを通してC1を作成するのに10分かかりましたが、私は40個のプロットごとに再作成できません....)。ここで

+0

を私はエラーがかなり自明だと思う。それはあなたが複数の図に円(「C1」)を置くことができないことを伝えます。したがって、それらを一度にセルに入れたり、セルを使用するセルを実行する前に円を定義するセルを実行したりします。 – ImportanceOfBeingErnest

+0

これは再現できません。期待どおりに動作しています。 [ビデオ](https://i.stack.imgur.com/DLCJJ.gif)を参照してください。 – ImportanceOfBeingErnest

+2

新しい質問であなたの質問に答えることは役に立ちません。これは、(1)質問を読んでいる人には明らかではない、(2)人々が詳細に読まなくても移動するように、すでに答えを見つけたかのように見える。要するに、これはあなたが答えを得るのを妨げるでしょう。あなたの答えがあなたの質問よりもはっきりしていると思うなら、あなたの質問に置き換えてください。 – ImportanceOfBeingErnest

答えて

0

はそれを動作させる方法である:ちょうど円のコピーを行うとコピーをプロットします

まずインポートコピー:

from copy import copy 

、その後、代わりに行うので:

for c in Liste_circles: 
    ax.add_patch(c) 

する必要があります:

for c in Liste_circles: 
    new_c=copy(c) 
    ax.add_patch(new_c) 

この方法で、私たちは同じサークル(=同じアーティスト)が、そのコピーをプロットしません

0

また、あなたが円の値についてのx軸とy軸を設定することができます興味を持っている場合:

import matplotlib.pyplot as plt 
from matplotlib.patches import Circle 
from copy import copy 


def plot_circles (Liste_circles): 

    if len(Liste_circles) == 0: 
     print('No circles to display') 
    else: 

     fig = plt.figure(figsize=(5,5)) 
     ax = fig.add_subplot(111) 


     # On définie un fond blanc 
     ax.set_facecolor((1, 1, 1)) 


     # On définie les limites des axes pour que nos cercles soient au centre de notre graphique 
     # --> xmin sera le plus petit des x de tous les cercles - 2 fois le plus grand des rayons 
     # --> xmax sera le plus grand des x de tous les cercles + 2 fois le plus grand des rayons 
     # --> ymin sera le plus petit des y de tous les cercles - 2 fois le plus grand des rayons 
     # --> ymax sera le plus grand des y de tous les cercles + 2 fois le plus grand des rayons 
     L_x = [c.center[0] for c in Liste_circles] 
     L_y = [c.center[1] for c in Liste_circles] 
     L_r = [c.radius for c in Liste_circles] 

     min_x=min(L_x); max_x=max(L_x);min_y=min(L_y); max_y=max(L_y);max_r=max(L_r) 

     xmin = min_x - 2*max_r 
     xmax = max_x + 2*max_r 

     ymin = min_y - 2*max_r 
     ymax = max_y + 2*max_r 

     ax.set_xlim(xmin, xmax) 
     ax.set_ylim(ymin, ymax) 


     for c in Liste_circles: 
      new_c=copy(c) 
      ax.add_patch(new_c) 

     plt.show() 

C1=Circle(xy=(3, 4), radius=2, fill=False, color='g') 
C2=Circle(xy=(6, 3), radius=4, fill=False, color='b') 
C3=Circle(xy=(7, 2), radius=4, fill=False, color='r') 
関連する問題