2017-05-12 2 views
1

ストリームラインプロットに開始点を追加しようとしています。私は開始点を使ってコード例を見つけましたhere;このリンクでは、別の問題が議論されますが、start_points引数が機能します。 hereから私は流線のサンプルコード(images_contours_and_fieldsサンプルコード:streamplot_demo_features.py)を取得しました。なぜ私は開始点をあるコードで定義し、他のコードでは定義できないのか分かりません。私は、サンプルコード(streamplot_demo_features.py)で開始ポイントを定義しようとすると、私は次のエラーを取得する:Python Matplotlib開始点を提供するStreamplot

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を使用する方法で、ウェブ上くらいなので、任意の追加がないの通知をしました情報が役立つだろう。

+0

スタックオーバーフローが愚かであると私は私のポストに次のリンクを追加できないだろう。http://matplotlib.org/devdocs/api/_as_gen /matplotlib.axes.Axes.streamplot.html。ここから私はstart_pointsに必要な入力を見ることができますが、その他の情報はあまりありません。 – JWil

答えて

2

example that successfully uses start_pointsexample from the matplotlib pageとの間の主な違いは、公式の例では、2Dアレイを使用するのに対し、最初は、xyグリッドなどの1Dアレイを使用することです。 1Dアレイ、等間隔のグリッド:the documentationので

は明示的

xyを述べています。

1Dアレイに固執することがあります。この例がドキュメンテーションと矛盾する理由は不明ですが、単純に無視できます。

1Dアレイをグリッドとして使用すると、start_pointsは、2列の配列(最初の列のx座標、2番目の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() 

enter image description here

+0

素晴らしいです、ありがとうございます。これは、streamplot関数内で、start_points配列をx [0]配列とy [0]配列でブロードキャストできないという事実からエラーが発生していたことを知っています。 1D。 – JWil

関連する問題