4

これに対する修正は比較的簡単だと思いますが、Pythonでプロットした散布図を畳み込む方法がわかりません。

銀河緯度と銀河経度の 2 つのデータ配列があり、それらをハンマー投影法でプロットして、銀河座標での星の分布を表しています。

ここで、ボックスカー スムージングを使用して、15 度のボックスでプロットを滑らかにしたいと考えています。convolve と Box2DKernel で astropy.convolution を使用しようとしましたが、うまく動作しないようです。http://docs.astropy.org/en/stable/convolution/kernels.htmlの例も見ました が、それらの例を必要なことに翻訳する方法がわかりません。彼らは2D関数をプロットしてそれを平滑化しているようです。プロットをたたみ込んで、グラフ上の位置によってポイントをビンに入れることはできませんか? 何かを表示するために得た唯一のものは直線を生成し、その理由がわかりません。私はPythonに非常に慣れていないので、これは私に多くの問題を引き起こしています。

これは私がこれまでに持っているコードです:

これは、2 つの配列をハンマー射影にプロットします。

from astropy import units as u
import astropy.coordinates as coord
glat = coord.Angle(pos_data['GLAT']*u.degree)
glon = coord.Angle(pos_data['GLON']*u.degree)
glon= glon.wrap_at(180*u.degree)

import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10,12))
ax = fig.add_subplot(211, projection="hammer")
ax.scatter(glon.radian, glat.radian)
ax.grid(True)

これは、データを畳み込む私の試みです:

from astropy.convolution import convolve, Box2DKernel
data = [glon, glat]
kernel = Box2DKernel(10)
smoothed = convolve(data, kernel)

ax = fig.add_subplot(212, projection="hammer")
ax.scatter(smoothed[0]*u.radian, smoothed[1]*u.radian)
ax.grid(True)

私が言ったように、それはエラーの代わりに何かを与えることになった多くの試みの1つにすぎませんが、関数を正しく使用しているかどうかはまったくわかりません. 私が行った方法で「データ」を作成できるかどうかはわかりません(または考えられません)が、配列の他の組み合わせや、それぞれを1D配列として畳み込むこともできませんでした。

どんなアイデアでも本当に役に立ちます、ありがとう。

4

1 に答える 1

1

Kernel Density Estimationを探しているようです。これは、空間点パターンの個々の測定値を連続分布に変換する方法です。私はたまたまscikit-learn の実装を好みます。その後、basemapパッケージを使用してプロットを行うことができます。次のコードは、状況に適応できるはずです。ここで、radecは星の赤経と赤緯の配列です (ここでは、ラジアンと度に注意する必要があります)。

from sklearn.neighbors import KernelDensity
from sklearn.grid_search import GridSearchCV

data = np.column_stack((ra, dec))

# use a tophat/boxcar kernel and a haversine (spherical) metric
p = {'bandwidth': np.logspace(-1, 1, 20), 'kernel'='tophat', 
     'metric'='haversine'}
grid = GridSearchCV(KernelDensity(), params)
grid.fit(data)

meshgrid次に、KDE ​​を評価する対象を定義し、 imshow/ pcolormesh/ハンマー プロジェクションを使用してプロットできるようにする必要があります (こちらまたはこちらを参照) 。

于 2015-12-16T17:14:46.800 に答える