我想删除多行图中的特定行。Bellow 是一个给定的示例,它对我来说还不够,因为它只删除了最后一条绘制的线,而不是我想要删除的线。我怎样才能做到这一点?如何在整个程序中处理特定行(按名称、编号、引用)并删除该行?
self.axes.lines.remove(self.axes.lines[0])
我想删除多行图中的特定行。Bellow 是一个给定的示例,它对我来说还不够,因为它只删除了最后一条绘制的线,而不是我想要删除的线。我怎样才能做到这一点?如何在整个程序中处理特定行(按名称、编号、引用)并删除该行?
self.axes.lines.remove(self.axes.lines[0])
几乎所有的绘图函数都返回对artist
创建的对象的引用:
ln, = plot(x, y) # plot actually returns a list of artists, hence the ,
im = imshow(Z)
remove
如果您有参考资料,您可以通过(doc)函数删除艺术家,例如:
ln.remove()
im.remove()
编辑:tacaswell 的回答比我的好
无论如何,我都会保留我的答案以供记录(并且因为赞成票很好:wink :)
如果您不想显式保存所有行的引用,但您知道要删除的行的索引,则可以使用 maptplotlib 为您存储它们的事实。
self.axes.lines
是一个列表matplotlib.lines.Line2D
。所以要删除,例如,你可以做的第二条线
self.axes.lines[1].remove()
我也有同样的需求,对我来说,将 id 添加到数据系列并稍后通过查找具有给定 id 的系列(集合)将其删除会更整洁。
def add_series(x, id):
plt.plot(x, gid = id)
def remove_series(id):
for c in plt.collections: # possibly better to use: for c in plt.lines (see comment)
if c.get_gid() == id:
c.remove()
该代码为欠阻尼二阶系统生成阶跃响应。该代码还可用于说明绘图的叠加。该代码生成并以图形方式显示两个时间常数参数值的响应。该代码还说明了在 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()
您也可以将其用于多个子图
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()