Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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
Python 在matplotlib中管理和累积子批次_Python_Matplotlib_Subplot - Fatal编程技术网

Python 在matplotlib中管理和累积子批次

Python 在matplotlib中管理和累积子批次,python,matplotlib,subplot,Python,Matplotlib,Subplot,我有一个函数,它分别生成红色或绿色的三角形和四边形(称为“trisq”)。我的目标是通过在我的绘图函数上运行一个循环,在同一个绘图上安排这些形状 我可以绘制多个形状并调用plt.show(),这很好,但之后我将无法添加更多形状,因为它会给我一个空白输出 我认为我的问题是我不知道如何控制子地块命令。请查看我在代码中的内联注释,了解它是如何出错的。最干净的方法是什么?谢谢 (顺便说一句,这是我第一次在这里发帖。我认为我的问题是基本的,但我希望至少我已经清楚地提出了这个问题) 更新: 我的具体问题是

我有一个函数,它分别生成红色或绿色的三角形和四边形(称为“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()