numpy Matplotlib流线图,流线不会中断或结束

5w9g7ksd  于 2022-11-23  发布在  其他
关注(0)|答案(2)|浏览(167)

我想画一个流线图,当它们靠得太近的时候不会停止。我宁愿每个流线都在两个方向上计算,直到它碰到窗口的边缘。结果是会有一些区域它们都混杂在一起。但这正是我想要的。
我在matplotlib中做这个吗?如果没有,有没有另一个工具可以用来做这个,可以和python/numpy接口?

import numpy as np
import matplotlib.pyplot as plt
Y,X = np.mgrid[-10:10:.01, -10:10:.01]
U, V = Y**2, X**2
plt.streamplot(X,Y, U,V, density=1)
plt.show(False)

z6psavjg

z6psavjg1#

好的,我已经发现我可以通过频繁地打开density并使用自定义的起始点来获得我想要的东西。我仍然很感兴趣是否有更好的或替代的方法来做到这一点。
这是我的解决方案,看起来是不是好多了?

import numpy as np
import matplotlib.pyplot as plt
Y,X = np.mgrid[-10:10:.01, -10:10:.01]
y,x = Y[:,0], X[0,:]
U, V = Y**2, X**2
stream_points = np.array(zip(np.arange(-9,9,.5), -np.arange(-9,9,.5)))
plt.streamplot(x,y, U,V, start_points=stream_points, density=35)
plt.show(False)

**编辑:**顺便说一下,streamplot中似乎有一些bug,使得start_points关键字只有在网格数据使用一维数组时才起作用。请参见Python Matplotlib Streamplot providing start points

rdlzhqv9

rdlzhqv92#

自Matplotlib 3.6.0版起,添加了一个可选参数broken_streamlines,用于禁用流线断点。
将它添加到代码段中会产生以下结果:

import numpy as np
import matplotlib.pyplot as plt
Y,X = np.mgrid[-10:10:.01, -10:10:.01]
U, V = Y**2, X**2
plt.streamplot(X,Y, U,V, density=1, broken_streamlines=False)
plt.show(False)

a stream plot with continuous streamlines
注意
此参数仅延伸最初绘制的流线(如问题中所示)。这意味着上述修改图中的流线比另一个答案中获得的结果更加不均匀,自定义start_points。任何流线图上的流线密度并不代表该点UV的大小,请参阅documentationmatplotlib.pyplot.streamplotdensity参数,以了解当可选的start_points参数未指定流线起点时,默认情况下如何选择流线起点的详细信息。
要获得精确的流线密度,请考虑使用matplotlib.pyplot.contour,但请注意contour不显示箭头。

相关问题