gpt4 book ai didi

python - 在不清除图形的情况下删除流图(matplotlib)

转载 作者:行者123 更新时间:2023-11-28 16:40:41 27 4
gpt4 key购买 nike

到目前为止,我一直在这里找到帮助。我一直在寻找我的问题的解决方案很长一段时间,我现在可能已经失明了..我希望你能帮助我解决这个问题:

我已经构建了一个 python 程序,可以绘制方向场(箭袋)或流图。由于图中可能还有其他数据(例如轨迹),我不能只清除所有内容并重新绘制。相反,我想删除单个元素。这适用于除流图之外的所有内容。

因此,流图由线条和箭头组成。存储在变量 sl 中,我可以简单地调用 sl.lines.remove() 来删除这些行。不过,这对箭头不起作用。我该如何删除这些?

编辑:所以这里有一些代码:

import numpy as np
import matplotlib.pyplot as pp

streamplot = None

def mySystem(z):
x, y = z
return y, -x


def stream():
xmin = -10
xmax = 10
ymin = -10
ymax = 10

N = 40
M = int(N)
a = np.linspace(xmin,xmax,N)
b = np.linspace(ymin,ymax,N)

X1, Y1 = np.meshgrid(a,b)
DX1, DY1 = mySystem([X1,Y1])

global streamplot
streamplot = pp.streamplot(X1, Y1, DX1, DY1, density=2, color='#b5b5b5')

def removeStream():
global streamplot
streamplot.lines.remove()

#doesn't work: streamplot.arrows.remove()

stream()
removeStream()
pl.show() # arrows still here!

最佳答案

PatchCollection 没有可用的 remove 方法有一个解决方法。

箭头被添加到 ax.patches。假设您在图中没有任何其他补丁(例如条形图使用补丁),您可以执行 ax.patches = [] 来删除箭头。

理想情况下,您将从 sl.arrows PatchCollection 中获取补丁,但它实际上并不存储对补丁本身的引用,只是存储它们的原始路径.

如果您在绘图中确实有其他补丁,则可以移除 FancyArrowPatch 的所有实例。例如

keep = lambda x: not isinstance(x, mpl.patches.FancyArrowPatch)
ax.patches = [patch for patch in ax.patches if keep(patch)]

关于python - 在不清除图形的情况下删除流图(matplotlib),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19621521/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com