2012-06-06 60 views
2

我有一個列表,我在其中添加Axes3D繪圖。就像這樣:清理Axes3D後重新繪製線條

self.myList.append(self.axes.plot(xValues, 
            yValues, 
            zValues, 
            picker=self.line_picker)[0]) 

當該行代碼運行時,由圖()函數返回的實例存儲在列表和線將自動生成,這是我想要的。此代碼在程序啓動時運行並繪製可變數量的行。

現在我需要做的是這樣的:

當用戶選中一個複選框,我想替換當前與另一組數據繪製的數據。然後,當用戶取消選中複選框時,我想要再次繪製初始數據。

我對清除初始數據沒有問題;我只是這樣做:

self.axes.clear() 
self.canvas.draw() 
self.axes.mouse_init() 

現在我有一個空白的3D圖形。

一旦清除了相同的數據,我該如何重新繪製相同的數據?我可以以某種方式使用存儲在列表中的情節實例並重新繪製它們?

我最終的問題是,是否必須使用原始數據重新繪製原始圖像,比如我第一次繪製原始圖像,或者我可以以某種方式隱藏/禁用初始座標軸,然後簡單地恢復它?

回答

0

也許最簡單的解決辦法是保持項目的參考,並簡單地切換特定藝術家的可視屬性:

import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 

plt.ion() 

ax = plt.axes(projection='3d') 
n = 3 

xs = np.random.randint(23, 32, n) 
ys = np.random.randint(0, 100, n) 
zs = np.random.randint(0, 10, n) 
scatter = ax.scatter(xs, ys, zs=zs) 

plt.draw() 
scatter.set_visible(False) 
plt.draw() 
scatter.set_visible(True) 
plt.draw()