轴清除后重新绘制QuadMesh集合

时间:2017-12-12 02:13:58

标签: python matplotlib

创建pcolormesh图时,如下所示。 ax.pcolormesh调用返回一个matplotlib.collections.QuadMesh对象。

是否可以将此对象保存在变量中,清除轴(或图?),绘制其他内容然后使用保存的matplotlib.collections.QuadMesh对象重新绘制初始pcolormesh?

我正在努力避免再次调用ax.pcolormesh。

小例子:

import matplotlib.pyplot as plt;
import numpy as np;

counter = 0;

def onClick(event):
    global counter;
    counter += 1;

    ax.clear();

    if counter % 2:
        # Plot something else
        ax.plot(x1, x2)
    else:
        # Re-draw the initial pcolormesh using quadMeshCol?
        pass;

    fig.canvas.draw();

x1 = np.random.randn(100);
x2 = np.random.randn(100);
x3 = np.random.randn(100, 100);

fig, ax = plt.subplots();

quadMeshCol = ax.pcolormesh(x1, x2, x3);

fig.canvas.mpl_connect("button_press_event", onClick);

plt.show();

我整个上午都试图这样做,但没有取得任何成功 我确实看到matplotlib.collections.QuadMesh对象有一个draw方法,但它需要一个渲染器,我不知道如何获得其中一个。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

此代码的目的似乎是在两个图之间来回切换。因此,您可能只想使用两个轴,而不是多次在单个轴上重新创建内容。一个用于情节,一个用于colormesh。根据计数器的不同,您可以设置一个不可见的,也可以为轴绘制一些新内容。

import matplotlib.pyplot as plt
import numpy as np

counter = 0

def onClick(event):
    global counter
    counter += 1

    if counter % 2:
        # Plot something else
        ax2.clear()
        ax2.plot(x1, x2)
        ax.set_visible(False)
        ax2.set_visible(True)

    else:
        ax.set_visible(True)
        ax2.set_visible(False)

    fig.canvas.draw_idle()

x1 = np.random.randn(100)
x2 = np.random.randn(100)
x3 = np.random.randn(100, 100)

fig = plt.figure()
ax = fig.add_subplot(111, label="1")
ax2= fig.add_subplot(111, label="2")
ax2.set_visible(False)

quadMeshCol = ax.pcolormesh(x1, x2, x3)

fig.canvas.mpl_connect("button_press_event", onClick)

plt.show()

甚至更紧凑:

import matplotlib.pyplot as plt
import numpy as np

def onClick(event):
    ax.set_visible(not ax.get_visible())
    ax2.set_visible(not ax2.get_visible())
    fig.canvas.draw_idle()

x1 = np.random.randn(100)
x2 = np.random.randn(100)
x3 = np.random.randn(100, 100)

fig = plt.figure()
ax = fig.add_subplot(111, label="1")
ax2= fig.add_subplot(111, label="2")
ax2.set_visible(False)

quadMeshCol = ax.pcolormesh(x1, x2, x3)
line, = ax2.plot(x1, x2)

fig.canvas.mpl_connect("button_press_event", onClick)

plt.show()