2015-01-06 4 views
1

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

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.axes_grid1 import make_axes_locatable 

# the random data 
x = np.random.randn(2) 
y = np.random.randn(2) 


fig, axScatter = plt.subplots(figsize=(5.5,5.5)) 

# the scatter plot: 
axScatter.scatter(x, y) 
axScatter.set_aspect(1.) 


np.delete(x,1) 
np.delete(y,1) 
axScatter.scatter(x, y) 

plt.draw() 
plt.show() 

Я не мог понять, способ удалить точку из графика рассеяния после построения графика, хотя, если я использую тот же метод, я могу построить новую точку.

ответ

3

Вам необходимо обновить данные художника.

Также numpy.delete возвращает копию массива с удаленным элементом, поэтому вызов np.delete(x, 1) не изменяет оригинал x. Вместо этого вам нужно будет использовать x = np.delete(x, 1), если вы хотите удалить второй элемент.

Как простой пример:

import numpy as np 
import matplotlib.pyplot as plt 
import time 

x, y = np.random.random((2, 10)) 

fig, ax = plt.subplots() 
scat = ax.scatter(x, y, s=150) 

# Show the figure, then remove one point every second. 
fig.show() 
for _ in range(10): 
    time.sleep(1) 
    xy = np.delete(scat.get_offsets(), 0, axis=0) 
    scat.set_offsets(xy) 
    plt.draw() 
+0

Проблема с использованием этого метода является то, что он не изменяет размер точечного графика каждый раз, когда новый символ добавляется/удаляется. – Rishabh

+0

@Rishabh - Если вы хотите перемасштабировать оси, вызовите 'ax.autoscale()' каждый раз, когда вы удаляете точку. –

+0

'autoscale()', похоже, не работает, как проверено в [этом примере] (http://pastebin.com/Hhjf5E0M) – Rishabh

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