创建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方法,但它需要一个渲染器,我不知道如何获得其中一个。
非常感谢任何帮助。
答案 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()