1

表面密度プロットを生成する次のコードがあります。x と y は位置座標 = 座標で、z 軸は密度を表します。すべての値は事前に計算され、numpy 配列に格納されます。

    #set up the grid
xi, yi = np.linspace(x.min(), x.max(), 200), np.linspace(y.min(), y.max(), 200)
xi, yi = np.meshgrid(xi, yi)
#interpolate
rbf = scipy.interpolate.Rbf(x, y, z, function='linear')
zi = rbf(xi, yi)

plt.imshow(zi, vmin=z.min(), vmax=z.max(), origin='lower', extent=[x.min(), x.max(), y.min(), y.max()])
plt.scatter(x, y, c=z,marker='o')
plt.colorbar()
plt.scatter(xo,yo, c='b', marker='*')

plt.xlabel("RA(degrees)")
plt.ylabel("DEC(degrees)")
plt.title('Surface Density Plot 2.0 < z < 2.2')
plt.savefig('2.0-2.2.png', dpi= 300 )

plt.show()

私が抱えている問題は、xaxisの目盛りがユーザーフレンドリーな用語ではなく、150〜152の値ですが、xticks()関数を使用して目盛りの位置を変更できないようです。x軸をフォーマットする方法を教えてください。

edit- これらは、プロットに使用される xyz の値です。x、y、z は 3 つの numpy 配列 です

4

2 に答える 2

0

Firefly、コメントで提供したドロップボックスの画像に基づいて、以下があなたの問題を説明していると思います。x データの大きさは変動よりもはるかに大きいため、python には次のような値のリストがあります。

[150.05,150.10,150.15,150.20,150.25] 

これはこの図の xaxis には大きすぎるため、python はあなたが好まない巧妙なビジネスを行います (私も同意します)。

修正の 1 つは、単純に xticks を垂直に設定することです。

py.xticks(rotation='vertical')

Pythonが試みたことを手動で行うことができない場合は、x軸から150度を減算し、xlabelを次のように変更します

plt.xlabel("RA+150(degrees)")

データが度数でない場合は、代わりに再スケーリング (たとえば 1e2 で割る) をお勧めしますが、度数ではこれは非常に奇妙に見えます。

于 2013-04-24T15:07:52.587 に答える