2017-12-12 7 views
0

以下に示すように、pcolormeshプロットを作成するとき。 ax.pcolormesh呼び出しはmatplotlib.collections.QuadMeshオブジェクトを返します。Axisクリア後に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つを取得する方法はわかりません。

ご迷惑をおかけして申し訳ありません。

答えて

1

このコードの目的は、2つのプロットの間で前後に切り替えることだと思われます。そのため、1軸のコンテンツを複数回作成するのではなく、おそらく2つの軸を使用するだけです。 1つはプロット用、もう1つはカラーメッシュ用です。カウンタに応じて、どちらか一方を非表示に設定し、可能であれば新しいコンテンツを軸に描画します。

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

はいそれは私が後だったまさにです。それが可能であることを認識していませんでした。ありがとう。 – Hiho

関連する問題