如何从图中删除点?

时间:2018-07-24 13:15:30

标签: python matplotlib

我正在使用matplotlib.pyplot。

我想执行以下操作:

  1. 我想绘制一系列 背景 点(图中的单个蓝色点 例)。
  2. 我添加了 其他 点系列(例如3个黑点)
  3. 我保存了数字
  4. 我删除了 其他 系列点(黑色),并保持了 背景 (蓝色)。

如何执行第4步?我想避免重新绘制背景点。

Hereunder是缺少第4步的代码示例。

import matplotlib.pyplot as plt

fig = plt.figure()

plt.xlim(-10,10)
plt.ylim(-10,10)

#step 1: background blue dot
plt.plot(0,0,marker='o',color='b')

#step 2: additional black dots
points_list = [(1,2),(3,4),(5,6)]
for point in points_list:
    plt.plot(point[0],point[1],marker='o',color='k')

#step 3: save
plt.savefig('test.eps')

#step 4: remove additional black dots

3 个答案:

答案 0 :(得分:2)

您可以通过执行以下操作删除绘制的点:

temporaryPoints, = plt.plot(point[0],point[1],marker='o',color='k')
temporaryPoints.remove()

答案 1 :(得分:0)

您可以使用:

#step 2
black_points, = plt.plot( zip(*points_list), marker="o", color="k")

#... step 3 ...
#...

#step 4
black_points.set_visible( False)

答案 2 :(得分:0)

plot函数返回代表绘制数据的Line2D对象的列表。这些对象具有remove方法,该方法会将其从绘制它们的图形中移除(注意Line2D继承自Artist,您可以通过Line2D.__mro__进行检查):

remove() method of matplotlib.lines.Line2D instance
    Remove the artist from the figure if possible.  The effect
    will not be visible until the figure is redrawn, e.g., with
    :meth:`matplotlib.axes.Axes.draw_idle`.  Call
    :meth:`matplotlib.axes.Axes.relim` to update the axes limits
    if desired.

    [...]

因此,您可以执行以下操作(我一次性完成了对单点的绘制):

points = plt.plot(*zip(*points_list), 'o', color='k')[0]
# Remove the points (requires redrawing).
points.remove()

保持您的for循环是:

points = []
for point in points_list:
    points.extend(
        plt.plot(point[0], point[1], marker='o', color='k')
    )
for p in points:
    p.remove()

或更简洁地使用列表理解:

points = [plt.plot(*p, marker='o', color='k')[0] for p in points_list]