1

128 ポイントで構成された粗いスカイマップがあり、そのうち滑らか​​な healpix マップを作成したいと考えています (添付の図、LHS を参照)。本文で参照されている図:

ここ

データをロードし、最終的なマップに適したピクセル長の新しい経度と緯度の配列を作成します (たとえば、nside=32 を使用)。

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

lats = pi/2 + ths   # theta from 0, pi, size 8
lons = phs          # phi from 0, 2pi, size 16
data = sky_data[0]  # shape (8,16)

nside からのピクセル数に基づく新しい経度/緯度配列サイズ:

nside = 32 
pixIdx = hp.nside2npix(nside) # number of pixels I can get from this nside 
pixIdx = np.arange(pixIdx) # pixel index numbers

次に、補間によってそれらのピクセルの新しいデータ値を見つけ、角度からピクセルに変換します。

# new lon/lat
new_lats = hp.pix2ang(nside, pixIdx)[0] # thetas I need to populate with interpolated theta values
new_lons = hp.pix2ang(nside, pixIdx)[1] # phis, same

# interpolation
lut = RectSphereBivariateSpline(lats, lons, data, pole_values=4e-14)
data_interp = lut.ev(new_lats.ravel(), new_lons.ravel()) #interpolate the data
pix = hp.ang2pix(nside, new_lats, new_lons) # convert latitudes and longitudes back to pixels

次に、補間された値を使用してヘルピー マップを作成します。

healpix_map = np.zeros(hp.nside2npix(nside), dtype=np.double) # create empty map
healpix_map[pix] = data_interp # assign pixels to new interpolated values
testmap = hp.mollview(healpix_map)

マップの結果は、添付の図の上部 RHS です。

(jet の使用を許してください -- viridis には「白い」ゼロがないため、そのカラーマップを使用すると青い背景が追加されます。)

マップは正しく見えません。図の粗いマップから、下の RHS に「ホットスポット」があるはずですが、ここでは左上に表示されていることがわかります。

健全性チェックとして、matplotlib を使用して、mollview プロジェクションで補間されたポイントの散布図を作成しました (図 2)。マーカーのエッジを削除して、マップのように見せました ;)

ax = plt.subplot(111, projection='astro mollweide')
ax.grid()
colors = data_interp
sky=plt.scatter(new_lons, new_lats-pi/2, c = colors, edgecolors='none', cmap ='jet')
plt.colorbar(sky, orientation = 'horizontal')

このマップ、添付の図の右側の下部が、まさに私が期待するものを生成していることがわかります! だから座標は大丈夫です、そして私は完全に混乱しています。

誰もこれに遭遇したことがありますか?私に何ができる?このマップと将来のマップで healpy 関数を使用したいので、matplotlib を使用するだけでは選択肢がありません。

ありがとう!

4

2 に答える 2

1

私はそれを理解しました-補間を機能させるには、シータにpi/2を追加する必要があったため、最終的に画像を正しくレンダリングするには、次の変換を適用する必要があります:

newnew_lats = pi - new_lats
newnew_lons = pi + new_lons

見た目はそれほど目立たなくなりましたが、補間にはまだ少し問題があるようです。比較のために別のものを試してみるかもしれません。

于 2016-08-16T17:47:55.580 に答える
0

私は healpix の専門家ではありません (実際、私はこれまで使用したことがありません - 私は素粒子物理学者です) が、私が知る限り、それは単なる慣習の問題です: モルワイデ図法では、 healpy は北極を配置します (正の緯度) が何らかの理由でマップの下部に表示されます。なぜそれが行われるのか、またはこれが意図的な動作なのかはわかりませんが、それが起こっていることは明らかです. 赤道より下のすべてをマスクする場合、つまり、正の緯度のポイントのみを保持する場合

mask = new_lats - pi/2 > 0
pix = hp.ang2pix(nside, new_lats[mask], new_lons[mask])
healpix_map = np.zeros(hp.nside2npix(nside), dtype=np.double)
healpix_map[pix] = data_interp[mask]
testmap = hp.mollview(healpix_map)

中心線より上にデータがないプロットが表示されます。

ヘルピーからのマスクされたプロット

少なくとも、修正するのは簡単です。mollview球体rotを投影する前に表示軸を中心に効果的に回転させるパラメーターと、(デフォルト)に設定するか、東を左右どちらに表示するかを設定flipできるパラメーターを受け入れます。少し実験すると、必要な座標系が得られることがわかります'astro''geo'

hp.mollview(healpix_map, rot=(180, 0, 180), flip='geo')

タプルの最初の 2 つの要素は、プロットの中心に設定するポイントの経度と緯度であり、3 つ目の要素は回転です。すべて度数です。マスクがない場合、次のようになります。

マスクされていない回転画像

私はあなたが探しているものだと信じています。

于 2016-08-16T19:46:40.937 に答える