我想画一个流线图,当它们靠得太近的时候不会停止。我宁愿每个流线都在两个方向上计算,直到它碰到窗口的边缘。结果是会有一些区域它们都混杂在一起。但这正是我想要的。
我在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)
2条答案
按热度按时间z6psavjg1#
好的,我已经发现我可以通过频繁地打开
density
并使用自定义的起始点来获得我想要的东西。我仍然很感兴趣是否有更好的或替代的方法来做到这一点。这是我的解决方案,看起来是不是好多了?
**编辑:**顺便说一下,
streamplot
中似乎有一些bug,使得start_points
关键字只有在网格数据使用一维数组时才起作用。请参见Python Matplotlib Streamplot providing start pointsrdlzhqv92#
自Matplotlib 3.6.0版起,添加了一个可选参数
broken_streamlines
,用于禁用流线断点。将它添加到代码段中会产生以下结果:
a stream plot with continuous streamlines
注意
此参数仅延伸最初绘制的流线(如问题中所示)。这意味着上述修改图中的流线比另一个答案中获得的结果更加不均匀,自定义
start_points
。任何流线图上的流线密度并不代表该点U
或V
的大小,请参阅documentation中matplotlib.pyplot.streamplot
的density
参数,以了解当可选的start_points
参数未指定流线起点时,默认情况下如何选择流线起点的详细信息。要获得精确的流线密度,请考虑使用matplotlib.pyplot.contour,但请注意
contour
不显示箭头。