Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matplotlib 不能将单个艺术家放置在多个图形中_Matplotlib_Plot_Python 3.6 - Fatal编程技术网

Matplotlib 不能将单个艺术家放置在多个图形中

Matplotlib 不能将单个艺术家放置在多个图形中,matplotlib,plot,python-3.6,Matplotlib,Plot,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

这是我的问题

我创建了一个函数来绘制一系列的圆。 我需要先用一个圆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()
现在我创建C1:

C1=Circle(xy=(3, 4), radius=2, fill=False, color='g')
最后,我尝试绘制它。
第一个阴谋成功了:

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])
错误如下:

RuntimeError:无法将单个艺术家放入多个图形中

我可以通过以下方式实现:

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])

如何在不必每次重新创建C1的情况下,将我的圆C1与其他40个圆一起绘制?(我的程序用了10分钟通过一个复杂的算法创建了C1,我无法在40个图中的每一个都重新创建它……)

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

首次导入副本:

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)

这样,我们就不会绘制同一个圆(=同一个艺术家),而是绘制其副本。此外,如果您感兴趣,您可以根据圆的值设置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')

我认为这个错误是不言自明的。它告诉您不能将圆(
C1
)放在多个图形中。因此,要么将它们全部放在一个单元格中,要么在运行使用圆的单元格之前运行定义圆的单元格。我无法重现此情况。一切正常。看,用新问题回答你的问题是没有用的。这(1)对于阅读问题的人来说是不清楚的,(2)看起来好像你已经找到了答案,这样人们就可以在没有详细阅读的情况下继续前进。总之,这将阻止你得到答案。如果你认为答案中的内容比你的问题更清楚,请将其替换为你的问题。谢谢。我编辑了我的第一个问题,并将删除我的答案:-)我可能有一个解决方案,我只需要在我的绘图函数中创建一个C1的副本,并绘制副本,而不是C1自己。但我不知道如何复制C1。。。。。请参阅我的另一个问题:“如何复制python对象/如何获取python对象的元素”,只是复制对我不起作用