9

Matplotlib を使用して極座標で等高線図を作成するために使用したい一連のデータがあります。

私のデータは次のとおりです。

  • theta- 角度値の 1D 配列
  • radius- 半径値の 1D 配列
  • value- 等高線に使用したい値の 1D 配列

これらはすべて適切に整列する 1D 配列です - 例:

theta   radius   value
30      1        2.9
30      2        5.3
35      5        9.2

つまり、この 3 つの変数の「テーブル」の各行が 1 つの点を定義するように、すべての値が十分な回数繰り返されます。

これらの値から極コンター プロットを作成するにはどうすればよいですか? 半径とシータの値を x と y の値に変換してデカルト座標で行うことを考えましたが、輪郭関数には 2D 配列が必要なようで、その理由がよくわかりません。

何か案は?

4

2 に答える 2

8

Matplotlib のcontour()関数は、データが点の 2D グリッドと、それらのグリッド点のそれぞれに対応する値のグリッドとして配置されることを想定しています。データが自然にグリッドに配置されている場合は、r、シータを x、y に変換しcontour(r*np.cos(theta), r*np.sin(theta), values)、プロットを作成するために使用できます。

データが自然にグリッド化されていない場合は、Stephen のアドバイスに従いgriddata()、データをグリッドに補間するために使用する必要があります。

次のスクリプトは、両方の例を示しています。

import pylab as plt
from matplotlib.mlab import griddata
import numpy as np

# data on a grid
r = np.linspace(0, 1, 100)
t = np.linspace(0, 2*np.pi, 100)
r, t = np.meshgrid(r, t)
z = (t-np.pi)**2 + 10*(r-0.5)**2

plt.subplot(121)
plt.contour(r*np.cos(t), r*np.sin(t), z)

# ungrid data, then re-grid it
r = r.flatten()
t = t.flatten()
x = r*np.cos(t)
y = r*np.sin(t)
z = z.flatten()
xgrid = np.linspace(x.min(), x.max(), 100)
ygrid = np.linspace(y.min(), y.max(), 100)
xgrid, ygrid = np.meshgrid(xgrid, ygrid)
zgrid = griddata(x,y,z, xgrid, ygrid)

plt.subplot(122)
plt.contour(xgrid, ygrid, zgrid)

plt.show()

ここに画像の説明を入力

于 2011-07-01T17:30:22.853 に答える
3

極等高線プロットを直接実行できるかどうかはわかりませんが、デカルト座標にgriddata変換すると、関数を使用して 1D 配列を 2D に変換できます。

于 2011-07-01T14:58:21.867 に答える