Python 在matplotlib中管理和累积子批次
我有一个函数,它分别生成红色或绿色的三角形和四边形(称为“trisq”)。我的目标是通过在我的绘图函数上运行一个循环,在同一个绘图上安排这些形状 我可以绘制多个形状并调用plt.show(),这很好,但之后我将无法添加更多形状,因为它会给我一个空白输出 我认为我的问题是我不知道如何控制子地块命令。请查看我在代码中的内联注释,了解它是如何出错的。最干净的方法是什么?谢谢 (顺便说一句,这是我第一次在这里发帖。我认为我的问题是基本的,但我希望至少我已经清楚地提出了这个问题)Python 在matplotlib中管理和累积子批次,python,matplotlib,subplot,Python,Matplotlib,Subplot,我有一个函数,它分别生成红色或绿色的三角形和四边形(称为“trisq”)。我的目标是通过在我的绘图函数上运行一个循环,在同一个绘图上安排这些形状 我可以绘制多个形状并调用plt.show(),这很好,但之后我将无法添加更多形状,因为它会给我一个空白输出 我认为我的问题是我不知道如何控制子地块命令。请查看我在代码中的内联注释,了解它是如何出错的。最干净的方法是什么?谢谢 (顺便说一句,这是我第一次在这里发帖。我认为我的问题是基本的,但我希望至少我已经清楚地提出了这个问题) 更新: 我的具体问题是
更新: 我的具体问题是:如何显示一个图,然后向其中添加更多元素,并在上面的上下文中再次显示它,并且可能在循环中重复?显然,plt.show()只能调用一次,不能以持续的方式调用 Plt.show()显示活动图形。在您第一次调用plt.show()之后,就再也没有活动的图形了 不幸的是,问题并不清楚实际目标是什么 最后您只能调用plt.show一次。您还可以在两者之间创建一个新图形
确保在trisq函数中添加集合 感谢您的回复,ImportanceOfBeingErnest!我将集合移动到函数中(只是在复制时错过了它)。我的目标是有一个循环,在循环的每次迭代中调用我的trisq函数一次,并在那里显示结果,再加上一个短暂的停顿,这样我就可以看到三角形和正方形单元格排列的增长,而不是一次完成所有的工作,然后显示它。正如你所指出的,当PLT。()被调用时,图像会被重置。
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()