你如何从matplotlib图中删除一个点?

时间:2017-09-23 23:19:36

标签: python matplotlib plot

让我们说你在matplotlib中有一个情节,类似的东西:

figure = Figure()
figureCanvas = FigureCanvas(figure)
axes = figure.add_subplot(111)
axes.plot([1, 2, 3], [2, 3, 1], linestyle = "None", marker = "o", color = '#1f77b4', markersize = 3)

这会给你一个3分的情节。如何从绘图中删除特定点,而不重新绘制整个内容?

1 个答案:

答案 0 :(得分:1)

首先,您需要至少重绘一个图(Line2D对象),否则图中不会有任何变化。

在不知道不重绘的目的的情况下,很难判断出可接受的解决方案。但是,通常您只需重绘整个画布。 要设置新数据,可以使用Line2D.set_data()方法,如下所示。您可以按下要删除的点的数字键(0,1,2)。

import matplotlib.pyplot as plt

x = [1, 2, 3]
y = [2, 3, 1]

fig, ax = plt.subplots()
line, = ax.plot(x, y, ls="None", marker="o", color='#1f77b4', ms=10)

def remove_point(event):
    try:
        key = int(event.key)
        xvals = x[:]
        xvals.pop(key)
        yvals = y[:]
        yvals.pop(key)
        line.set_data(xvals,yvals)
        fig.canvas.draw_idle()
    except:
        pass

fig.canvas.mpl_connect('key_press_event', remove_point)
ax.set_title("Press number of point to remove")
plt.show()