[英]Streamplot error: Cannot convert float NaN to integer
我正在嘗試使用streamplot函數繪制速度場,但是由於某種原因它失敗了。 這是關於函數的原始SO帖子,並帶有示例: 如何在python中使用繪制程序繪制流線,當我知道速度(numpy 2d數組)的u和v分量時? 。 這個例子對我來說很好。 但是,我試圖修改這些值以簡化功能並模仿初始條件,但現在它不再起作用。
這是我的“簡化”代碼:
import matplotlib.pyplot as plt
import numpy as np
from streamplot import streamplot
x = np.linspace(0, 1, 10)
y = np.linspace(0, 2, 10)
u = np.zeros((len(x), len(y)))
v = np.zeros((len(x), len(y)))
u[:,len(y)-1]=1
speed = np.sqrt(u*u + v*v)
plt.figure()
plt.subplot(121)
streamplot(x, y, u, v,density=1, INTEGRATOR='RK4', color='b')
plt.subplot(122)
streamplot(x, y, u, v, density=(1,1), INTEGRATOR='RK4', color=u,
linewidth=5*speed/speed.max())
plt.show()
任何建議或幫助表示贊賞。
我認為問題在於(x,y)
網格的密度(x,y)
順便說一下,您在u
和v
初始化中已經切換了x
和y
)小於streamplot
網格的密度。 當您設置density=1
或(1,1)
(它們應該等效)時,則“將域划分為25x25的網格”。 我認為這意味着,與流圖或xy網格的密度相比,如果您的數據在足夠窄的區域中為非零值,則需要進行一些平滑處理。 我無法通過增加這些密度( density
或linspace
空間間距)來使其工作。 但是如果您將兩列的邊緣設為非零值,那似乎可以正常工作。
似乎streamplot函數在這些情況下不是很可靠,也許您應該提交一個bug。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 1, 10)
y = np.linspace(0, 2, 10)
u = np.zeros((y.size, x.size))
v = np.zeros((y.size, x.size))
u[:,-2:] = 1
speed = np.sqrt(u*u + v*v)
plt.figure()
plt.subplot(121)
plt.streamplot(x, y, u, v,density=1, color='b')
plt.subplot(122)
plt.streamplot(x, y, u, v, density=(1,1), color=u, linewidth=5*speed/speed.max())
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.