Python 清除轴后重新绘制四边形网格集合

Python 清除轴后重新绘制四边形网格集合,python,matplotlib,Python,Matplotlib,创建pcolormesh打印时,如下所示。ax.pcolormesh调用返回一个对象 是否可以将此对象保存在变量中、清除轴或图形、打印其他内容,然后使用保存的matplotlib.collections.QuadMesh对象重新绘制初始pcolormesh 我尽量避免再次打电话给ax.pcolormesh 小例子: import matplotlib.pyplot as plt; import numpy as np; counter = 0; def onClick(event):

创建pcolormesh打印时,如下所示。ax.pcolormesh调用返回一个对象

是否可以将此对象保存在变量中、清除轴或图形、打印其他内容,然后使用保存的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方法,但是它需要一个渲染器,我不知道如何获得其中的一个


非常感谢您的帮助。

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

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

是的,那正是我想要的。没有意识到这是可能的。谢谢