2

streamplot 関数を使用して速度場をプロットしようとしていますが、何らかの理由で失敗しています。これは、例を含む関数に関する元のSO投稿です: how to plot streamlines , when i know u and v components of velocity(numpy 2d arrays), using a plotting program in python? . この例は私にとってはうまくいきます。ただし、値を変更して関数を単純化し、初期条件を模倣しようとしたところ、機能しなくなりました。

これが私の「簡略化された」コードです:

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()

推奨事項やヘルプをいただければ幸いです。

4

1 に答える 1

0

問題は、グリッドの密度(ところで、との初期化でと(x,y)を切り替えた) がグリッドの密度よりも小さいことだと思います。orを設定すると (同等である必要があります)、「ドメインは 25x25 グリッドに分割されます」。これは、ストリームプロットまたは xy グリッドの密度と比較して、十分にスリムな領域でデータがゼロでない場合、何らかの平滑化が行われていることを意味すると思います。これらの密度(または間隔)を増やしても機能しませんでした。しかし、エッジで2つの列をゼロ以外にすると、うまくいくようです。xyuvstreamplotdensity=1(1,1)densitylinspace

streamplot 関数はこれらのケースではあまり堅牢ではないようです。おそらくバグを送信する必要があります。

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()
于 2013-02-17T16:53:32.683 に答える