Python Matplotlib Streamplot 提供起点
Python Matplotlib Streamplot providing start points
我正在尝试将起点添加到流线图。我找到了一个使用起点的示例代码 here; at this link a different issue is discussed but the start_points argument works. From here 我抓取了流线型示例代码(images_contours_and_fields 示例代码:streamplot_demo_features.py)。我不明白为什么我可以在一个代码中而不是另一个代码中定义起点。当我尝试在示例代码 (streamplot_demo_features.py) 中定义起点时出现以下错误:
Traceback (most recent call last):
File "<ipython-input-79-981cad64cff6>", line 1, in <module>
runfile('C:/Users/Admin/.spyder/StreamlineExample.py', wdir='C:/Users/Admin/.spyder')
File "C:\ProgramData\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
execfile(filename, namespace)
File "C:\ProgramData\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 87, in execfile
exec(compile(scripttext, filename, 'exec'), glob, loc)
File "C:/Users/Admin/.spyder/StreamlineExample.py", line 28, in <module>
ax1.streamplot(X, Y, U, V,start_points=start_points)
File "C:\ProgramData\Anaconda2\lib\site-packages\matplotlib\__init__.py", line 1891, in inner
return func(ax, *args, **kwargs)
File "C:\ProgramData\Anaconda2\lib\site-packages\matplotlib\axes\_axes.py", line 4620, in streamplot
zorder=zorder)
File "C:\ProgramData\Anaconda2\lib\site-packages\matplotlib\streamplot.py", line 144, in streamplot
sp2[:, 0] += np.abs(x[0])
ValueError: non-broadcastable output operand with shape (1,) doesn't match the broadcast shape (100,)
我注意到网络上没有太多关于 start_points 的使用方法,因此任何其他信息都会有所帮助。
与example that successfully uses start_points
and the example from the matplotlib page的主要区别在于第一个使用一维数组作为x
和y
网格,而官方示例使用二维数组。
因为 the documentation 明确指出
x
, y
: 1d arrays, an evenly spaced grid.
我们可能会坚持使用一维数组。目前还不清楚为什么这个例子与文档相矛盾,但我们可以简单地忽略它。
现在,使用一维数组作为网格,start_points
按预期工作,因为它采用 2 列数组(第一列 x 坐标,第二列 y 坐标)。
一个完整的例子:
import numpy as np
import matplotlib.pyplot as plt
x,y = np.linspace(-3,3,100),np.linspace(-3,3,100)
X,Y = np.meshgrid(x,y)
U = -1 - X**2 + Y
V = 1 + X - Y**2
speed = np.sqrt(U*U + V*V)
start = [[0,0], [1,2]]
fig0, ax0 = plt.subplots()
strm = ax0.streamplot(x,y, U, V, color=(.75,.90,.93))
strmS = ax0.streamplot(x,y, U, V, start_points=start, color="crimson", linewidth=2)
plt.show()
我正在尝试将起点添加到流线图。我找到了一个使用起点的示例代码 here; at this link a different issue is discussed but the start_points argument works. From here 我抓取了流线型示例代码(images_contours_and_fields 示例代码:streamplot_demo_features.py)。我不明白为什么我可以在一个代码中而不是另一个代码中定义起点。当我尝试在示例代码 (streamplot_demo_features.py) 中定义起点时出现以下错误:
Traceback (most recent call last):
File "<ipython-input-79-981cad64cff6>", line 1, in <module>
runfile('C:/Users/Admin/.spyder/StreamlineExample.py', wdir='C:/Users/Admin/.spyder')
File "C:\ProgramData\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
execfile(filename, namespace)
File "C:\ProgramData\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 87, in execfile
exec(compile(scripttext, filename, 'exec'), glob, loc)
File "C:/Users/Admin/.spyder/StreamlineExample.py", line 28, in <module>
ax1.streamplot(X, Y, U, V,start_points=start_points)
File "C:\ProgramData\Anaconda2\lib\site-packages\matplotlib\__init__.py", line 1891, in inner
return func(ax, *args, **kwargs)
File "C:\ProgramData\Anaconda2\lib\site-packages\matplotlib\axes\_axes.py", line 4620, in streamplot
zorder=zorder)
File "C:\ProgramData\Anaconda2\lib\site-packages\matplotlib\streamplot.py", line 144, in streamplot
sp2[:, 0] += np.abs(x[0])
ValueError: non-broadcastable output operand with shape (1,) doesn't match the broadcast shape (100,)
我注意到网络上没有太多关于 start_points 的使用方法,因此任何其他信息都会有所帮助。
与example that successfully uses start_points
and the example from the matplotlib page的主要区别在于第一个使用一维数组作为x
和y
网格,而官方示例使用二维数组。
因为 the documentation 明确指出
x
,y
: 1d arrays, an evenly spaced grid.
我们可能会坚持使用一维数组。目前还不清楚为什么这个例子与文档相矛盾,但我们可以简单地忽略它。
现在,使用一维数组作为网格,start_points
按预期工作,因为它采用 2 列数组(第一列 x 坐标,第二列 y 坐标)。
一个完整的例子:
import numpy as np
import matplotlib.pyplot as plt
x,y = np.linspace(-3,3,100),np.linspace(-3,3,100)
X,Y = np.meshgrid(x,y)
U = -1 - X**2 + Y
V = 1 + X - Y**2
speed = np.sqrt(U*U + V*V)
start = [[0,0], [1,2]]
fig0, ax0 = plt.subplots()
strm = ax0.streamplot(x,y, U, V, color=(.75,.90,.93))
strmS = ax0.streamplot(x,y, U, V, start_points=start, color="crimson", linewidth=2)
plt.show()