Matplotlib - Как удалить определенную линию или кривую

Я хочу удалить определенную строку на участке нескольких строк. Bellow - данный пример, которого недостаточно для меня, потому что он удаляет только последнюю строчную линию, а не строку, которую я хочу удалить. Как я могу это сделать? Как я могу обратиться к определенной строке (по имени, по номеру, по ссылке) во всей программе и удалить эту строку?

self.axes.lines.remove(self.axes.lines[0])

Ответ 1

Почти все функции построения возвращают ссылку на объект artist, созданный ex:

ln, = plot(x, y)  # plot actually returns a list of artists, hence the ,
im = imshow(Z)

Если у вас есть ссылка, вы можете удалить исполнителя с помощью функции remove (doc) ex:

ln.remove()
im.remove()

Ответ 2

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

self.axes.lines

- список matplotlib.lines.Line2D. Таким образом, чтобы удалить, например, вторую линию, которую вы можете сделать

self.axes.lines[1].remove()

Ответ 3

У меня была такая же потребность, и для меня оказалось более аккуратным добавить идентификатор в ряд данных и удалить его позже, найдя серию (сбор) с данным идентификатором.

def add_series(x, id):
  plt.plot(x, gid = id)

def remove_series(id):
  for c in plt.collections:
    if c.get_gid() == id:
      c.remove()

Ответ 4

Код генерирует пошаговый ответ для системы второго порядка с недостаточным затуханием. Код также можно использовать для иллюстрации наложения графиков. Код генерирует и графически отображает отклик для двух значений параметра постоянной времени. Код также иллюстрирует создание кометы в цикле for.

import numpy as np
import matplotlib.pyplot as plt

The following programme runs on version 3.6.
Code generates a pair of lines and the line 2 is removed in a for loop which
simulates a comet effect
pts=100
t2 = np.linspace(0.0,5.0,pts)
t2=(t2/50)
tm=t2*(10**3)
nz=t2.size
tc=np.linspace(0.8,2.5,2)
nz=tc.size
for n in range (nz):
    print(tc[n])
    resp = 1 - np.exp(-tc[n]*tm*10**-3*50) * np.cos(2*np.pi*50*tm*10**-3)
    for m in range(pts):
        plt.xlim(0,100)
        plt.ylim(0,2)
        plt.xlabel('Time,in milliseconds',fontsize=12)
        plt.ylabel('Respose',fontsize=12)
        plt.title('Underdamped Second Order System Step Response',fontsize=14)
        line1,=plt.plot(tm[0:m+1],resp[0:m+1],color='black',linewidth=0.2)
        line2,=plt.plot(tm[m],resp[m],marker='o',color='red',markersize=5)
        ax = plt.gca()
        plt.pause(0.02)
        ax.lines.remove(line2)
        plt.grid('on')
plt.show()

Ответ 5

Код в моем ответе генерирует ответ шага для системы с пониженным давлением второго порядка. Код также может использоваться для иллюстрации наложения графиков. Код генерирует и отображает графически, ответ для двух значений параметра постоянной времени. Код также иллюстрирует создание кометы в цикле for.

Ответ 6

Вы также можете использовать это для нескольких участков

subfig, subax = plt.subplots(3) 

def add_series(x, y0, y1, y2, gid):
    plt.figure(subfig.number)
    ln, = subax[0].plot(x, y0, gid=gid)
    ln, = subax[1].plot(x, y1, gid=gid)
    ln, = subax[2].plot(x, y2, gid=gid)
    plt.draw()

def remove_series(self, gid):
    plt.figure(subfig.number)
    for c0, c1, c2 in zip(subax[0].lines, subax[1].lines, subax[2].lines):
        if c0.get_gid() == gid:
            c0.remove()
        if c1.get_gid() == gid:
            c1.remove()
        if c2.get_gid() == gid:
            c2.remove()
    plt.draw()