python matplotlib 在axes.lines上迭代得到错误的长度

标签 python matplotlib axes

创建 axes 对象(名称 ax)并用 Line2D 实例填充它后,我想从 axes.lines 中删除一个子集(包含这些 Line2D 实例),基于标签。

但是,当我迭代此列表并删除成员时,它在评估时会缩小,然后我得到错误的计数(事实上,是一半),因此我无法迭代其所有成员

from matplotlib import pyplot as plt
fig = plt.figure()

# creating axes object
ax = fig.add_subplot(111)

# adding plots (Line2D objects) to ax
N=30
for indx in range(N):
    ax.plot(1,1,label="my_line")

# adding another plot so the list is not identical
ax.plot(1,1,label="not_my_line")
print("I've created", len(ax.lines), "lines")

# iterating on the whole ax.lines list
for i,line in enumerate(ax.lines):
    if line.get_label() == "my_line":
        ax.lines.remove(line)

print ("I've expected to delete",N,"of them, but only",i+1 ,"lines were iterated")
print ("The remaining list is still", len(ax.lines), "lines long")

最佳答案

你不应该永远操作你在Python中迭代的列表。另请参阅

这里一个简单的解决方案是迭代原始列表的(完整)切片:

for i,line in enumerate(ax.lines[:]):

关于python matplotlib 在axes.lines上迭代得到错误的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51382053/

相关文章:

python - 将具有多个键值的字典映射到数据框

python - 导入带参数的 python 脚本

python - 如何在图的顶部绘制 x 轴?

python - 使用 matplotlib 动画更新 x 轴值

打印或导出时无法正确呈现 Matlab 字体

python - 如何在循环上并行运行单个函数? Python 2.7.12

python - Django 1.8 csrf名称错误: Undefined

python - 3 列数据帧的三角形热图

r - 使用 geom_sf() 绘制 sf 对象,其中包含除经纬度以外的任何投影

matlab - 我怎样才能让我的堆栈溢出?