2013-10-04 3 views
2

Итак, я снова с другим глупым вопросом. Рассмотрим этот кусок кодаПрозрачный накладной разброс на matplotlib image

x = linspace(-10,10,100); 
[X,Y]=meshgrid(x,x) 
g = np.exp(-(square(X)+square(Y))/2) 
plt.imshow(g) 
scat = plt.scatter(50,50,c='r',marker='+') 

Есть ли способ, чтобы очистить только точку рассеяния на графике, не очищая все изображение? На самом деле, я пишу код, где появление точки разрыва связано с Tkinter Checkbutton, и я хочу, чтобы он появлялся/исчезал, когда я нажимаю кнопку unclick.

Благодарим за помощь!

ответ

3

Возвратная ручка plt.scatter имеет несколько способов, включая remove(). Так что все, что вам нужно сделать, это позвонить. С вашим примером:

x = np.linspace(-10,10,100); 
[X,Y] = np.meshgrid(x,x) 
g = np.exp(-(np.square(X) + np.square(Y))/2) 
im_handle = plt.imshow(g) 
scat = plt.scatter(50,50,c='r', marker='+') 
# image, with scatter point overlayed 
scat.remove() 
plt.draw() 
# underlying image, no more scatter point(s) now shown 

# For completeness, can also remove the other way around: 
plt.clf() 
im_handle = plt.imshow(g) 
scat = plt.scatter(50,50,c='r', marker='+') 
# image with both components 
im_handle.remove() 
plt.draw() 
# now just the scatter points remain. 

(? Почти) все Matplotlib рендеринга функция возвращает дескриптор, которые имеют какой-то способ, чтобы удалить обработанную деталь.

Обратите внимание, что вам нужно позвонить, чтобы перерисовать, чтобы увидеть эффект remove() - от REMOVE помощи (курсив мой):

Удалить художника из рисунка, если это возможно. Эффект не будет до тех пор, пока рисунок не будет перерисован, например, : meth: matplotlib.axes.Axes.draw_idle.

+0

Спасибо за ответ. Где вы можете найти, какие существуют методы для определенной функции, подобной этой? На доске pyplot я только нахожу аргументы, но не методы ... –

+1

Хороший вопрос. В [dispadocs] (http://matplotlib.org/api/pyplot_api.html?highlight=scatter#matplotlib.pyplot.scatter) после списка аргументов он также описывает тип возвращаемого значения. В этом случае это «PathCollection», и после этого ссылки показывают, что этот класс наследуется от 'Collection', а затем' artist.Artist' и 'cm.ScalarMappable'. Каждый из них добавляет несколько методов, а класс 'Artist' - это то, что предоставляет' remove() '. Вы также можете найти больше в интерактивном сеансе с 'dir (scat)'. – Bonlenfum

+0

@MathieuPaurisse Также, пожалуйста, проясните разницу между строками _functions_ и _объектами, которые они возвращают. – tacaswell

Смежные вопросы