4

contourと の両方を使用して、軸ラベル付きの 2D データを表示しようとしていますpcolormesh。matplotlib ユーザー リストに記載されているように、これらの関数はさまざまな規則に従いますpcolormesh。x 値と y 値が個々のピクセルの角を指定することを期待し、ピクセルの中心contourを期待します。

これらを一貫して動作させるための最良の方法は何ですか?

私が検討した 1 つのオプションは、等間隔のデータを想定して、「中心から端まで」関数を作成することです。

def centers_to_edges(arr):
    dx = arr[1]-arr[0]
    newarr = np.linspace(arr.min()-dx/2,arr.max()+dx/2,arr.size+1)
    return newarr

もう 1 つのオプションはimshowextentキーワード セットを使用することです。最初のアプローチは 2D 軸 (たとえば、または
によって作成されたもの) ではうまく機能せず、2 番目のアプローチは軸番号を完全に破棄します。meshgridindices

4

1 に答える 1

0

あなたのデータは通常のメッシュですか? そうでない場合は、 griddata() を使用して取得できます。データが大きすぎる場合は、サブサンプリングまたは正則化が常に可能であると思います。データが大きすぎる場合、おそらく出力画像はそれに比べて常に小さくなり、これを利用できます。"extent" および "interpolation='nearest'" を指定して imshow() を使用すると、データがセルの中心にあり、エクステントがセルの下端 (コーナー) を提供することがわかります。一方、輪郭はデータがセルの中心にあると仮定し、X、Y はセルの中心でなければなりません。そのため、輪郭の入力ドメインに注意する必要があります。些細な例は次のとおりです。

x = np.arange(-10,10,1)
X,Y = np.meshgrid(x,x)
P = X**2+Y**2
imshow(P,extent=[-10,10,-10,10],interpolation='nearest',origin='lower')
contour(X+0.5,Y+0.5,P,20,colors='k')

私のテストでは、pcolormesh() は非常に遅いルーチンであり、常に回避しようとしていることがわかりました。griddata と imshow() は常に私にとって良い選択です。

于 2013-04-24T23:16:43.893 に答える