不能把单个艺术家放在一个以上的人物中

Ann*_*eso 3 plot matplotlib python-3.6

这是我的问题。

我创建了一个绘制圆列表的函数。我需要先用圆 C2 绘制我的圆 C1,然后用 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()
Run Code Online (Sandbox Code Playgroud)

现在我创建 C1:

C1=Circle(xy=(3, 4), radius=2, fill=False, color='g')
Run Code Online (Sandbox Code Playgroud)

最后我尝试绘制它。
第一个情节有效:

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

第二个失败:

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

有错误:

运行时错误:不能将单个艺术家放入多个图形中

我可以通过以下方式使其工作:

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])
Run Code Online (Sandbox Code Playgroud)

我怎样才能用其他 40 个圆绘制我的圆 C1 而不必每次都重新创建 C1?(我的程序花了 10 分钟通过一个复杂的算法来创建 C1,我无法在 40 个图中的每一个都重新创建它......)。

Ann*_*eso 6

以下是如何使其工作:只需复制圆圈并绘制副本:

第一个导入副本:

from copy import copy
Run Code Online (Sandbox Code Playgroud)

然后,而不是做:

for c in Liste_circles:
    ax.add_patch(c)
Run Code Online (Sandbox Code Playgroud)

我们必须做:

for c in Liste_circles:
   new_c=copy(c)
   ax.add_patch(new_c)
Run Code Online (Sandbox Code Playgroud)

这样我们就不会绘制同一个圆(=同一个艺术家)而是它的副本