2015年6月18日木曜日

astropy.coordinatesを用いた座標の取り扱い、その6 ― SkyCoodクラスの使用法、実例2

実例1では、エイトフ図の上にランダムに点をプロットしましたが、今度はSkyCoordオブジェクトを使って、もう少し実際の星の分布に近い図を作ってみます。ここでは、多変量の正規分布(multivariate normal distribution)を用いて、銀河系のバルジとディスクの星の分布を再現してみます。まず最初に、作業に必要なパッケージを読み込みます。

>>> from astropy import units as u
>>> from astropy.coordinates import SkyCoord
>>> import numpy as np

ではまず、numpy.random.multivariate_normalを用いて、プロットするためのデータを作成します。生成されるデータは、直交座標系を用いて表されます。正規分布の、Z成分の幅を変えることで、銀河系のディスクとバルジを表現します。

>>> disk = np.random.multivariate_normal(mean=[0,0,0], cov=np.diag([1,1,0.5]), size=5000)
>>> bulge = np.random.multivariate_normal(mean=[0,0,0], cov=np.diag([1,1,1]), size=500)
>>> galaxy = np.concatenate([disk, bulge])

次に、生成したデータをSkycoordオブジェクトに変換し、直交座標系から赤道座標系に座標を変換します。

>>> c_gal = SkyCoord(galaxy, representation='cartesian', frame='galactic')
>>> c_gal_icrs = c_gal.icrs

実例1でやったのと同じように、角度の単位をラジアンに変換し、赤経を $-\pi$ から $\pi$ で表すように変換を行います。

>>> ra_rad = c_gal_icrs.ra.wrap_at(180 * u.deg).radian
>>> dec_rad = c_gal_icrs.dec.radian

最後に実例1と同じ設定で、matplotlibを用いてデータをプロットしてみます。

>>> import matplotlib.pyplot as plt
>>> plt.figure(figsize=(8,4.2))
>>> plt.subplot(111, projection="aitoff")
>>> plt.title("Aitoff projection of our random data")
>>> plt.grid(True)
>>> plt.plot(ra_rad, dec_rad, 'o', markersize=2, alpha=0.3)
>>> plt.subplots_adjust(top=0.95,bottom=0.0)
>>> plt.show()


実例2