在matplotlib中管理和累积子图

时间:2017-06-25 17:25:38

标签: python matplotlib subplot

我有一个函数可以产生红色或绿色的三角形和四边形(称为“trisq”)。我的目标是通过在绘图功能上运行循环,在同一个图上排列这些形状。

我可以绘制多个形状并在其上调用plt.show(),但工作正常但之后我将无法添加更多形状,因为它会给我一个空白输出。

我认为我的问题是我不知道如何控制subplot命令。请在代码中查看我的内联注释,了解它是如何出错的。最干净的方法是什么?谢谢!

(顺便说一句,这是我第一次在这里发帖。我认为我的问题是基本的,但我希望至少我已经以明确的方式提出了这个问题)。

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

更新: 我的具体问题是:如何显示图形,然后添加更多元素并在上面的上下文中再次显示它并可能在循环内重复?显然,plt.show()只能被调用一次而不能持续调用。

1 个答案:

答案 0 :(得分:0)

Plt.show()显示了有效数字。在你第一次调用plt.show()之后,再也没有活跃的数字了。

不幸的是,问题并不清楚实际目标是什么。

最后你可以只调用一次plt.show。您也可以在两者之间创建一个新数字。

确保在trisq函数中添加集合。