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 个图中的每一个都重新创建它......)。
以下是如何使其工作:只需复制圆圈并绘制副本:
第一个导入副本:
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)
这样我们就不会绘制同一个圆(=同一个艺术家)而是它的副本