6

WCS で「my_cube.fits」という名前の FITS ファイルがあります。このファイルには、軸 1 と 2 (X と Y) に空間情報があり、軸 3 (Z) にスペクトル情報があります。astropy.io.fitsを使用して読み込むと、スペクトル軸は 0 で、空間軸は 1 と 2 です。ファイルは次のように読み込まれます。

    import astropy.io.fits as pyfits

    filename = 'my_cube.fits'
    my_data = pyfits.getdata(filename)
    my_header = pyfits.getheader(filename)

データを表示するために matplotlib を使用してきましたが、WCS を使用してデータ キューブの単一のスペクトル フレームを表示する方法を知りたいです。まあ言ってみれば:

    from astropy.wcs import WCS
    from matplotlib import pyplot as plt

    my_wcs = WCS(my_header)
    fig = plt.figure()
    ax = fig.add_subplot(111, projection=my_wcs)
    ax.imshow(my_data[5, :, :])

    plt.show()

私がそれをするだけなら、私は持っています:

    ...
    File "/usr/local/lib/python3.4/dist-packages/matplotlib/figure.py", line 1005, in add_subplot
    a = subplot_class_factory(projection_class)(self, *args, **kwargs)
    File "/usr/local/lib/python3.4/dist-packages/matplotlib/axes/_subplots.py", line 73, in __init__
    self._axes_class.__init__(self, fig, self.figbox, **kwargs)
    File "/usr/local/lib/python3.4/dist-packages/wcsaxes/core.py", line 49, in __init__
    self.patch = self.coords.frame.patch
    File "/usr/local/lib/python3.4/dist-packages/wcsaxes/frame.py", line 129, in patch
    self._update_patch_path()
    File "/usr/local/lib/python3.4/dist-packages/wcsaxes/frame.py", line 115, in _update_patch_path
    self.update_spines()
    File "/usr/local/lib/python3.4/dist-packages/wcsaxes/frame.py", line 192, in update_spines
    self['b'].data = np.array(([xmin, ymin], [xmax, ymin]))
    File "/usr/local/lib/python3.4/dist-packages/wcsaxes/frame.py", line 40, in data
    self._world = self.transform.transform(self._data)
    File "/usr/local/lib/python3.4/dist-packages/wcsaxes/transforms.py", line 166, in transform
    world = self.wcs.wcs_pix2world(pixel_full, 1)
    File "/usr/local/lib/python3.4/dist-packages/astropy/wcs/wcs.py", line 1329, in wcs_pix2world
'output', *args, **kwargs)
    File "/usr/local/lib/python3.4/dist-packages/astropy/wcs/wcs.py", line 1231, in _array_converter
    return _return_single_array(xy, origin)
    File "/usr/local/lib/python3.4/dist-packages/astropy/wcs/wcs.py", line 1212, in _return_single_array
"of shape (N, {0})".format(self.naxis))
    ValueError: When providing two arguments, the array must be of shape (N, 3)
4

2 に答える 2

9

完全なヘッダーで初期化したため、WCSオブジェクトには2つの空間軸スペクトル軸が含まれています(ヘッダーにはスペクトルWCSソリューションも含まれていると思います)。したがって、サブプロットに与えられた投影は 3D であるため、空間だけで 2D プロットを作成しても機能しません。

私はこれを自分で行ったことがなく、サンプル ファイルもありませんが、WCS のドキュメントには、sub 関数や天体関数を使用して個々の軸または天体 (空間) 軸を取得できることが記載されています。これらの関数は、それらの軸だけを持つ WCS オブジェクトを返します。

したがって、おそらく次のものを使用できます。

my_wcs = WCS(my_header).celestial
fig = plt.figure()
ax = fig.add_subplot(111, projection=my_wcs)
于 2016-05-02T15:16:29.007 に答える