Проблема с выводом соответствует изображению через wcs.Ошибка типа: данные изображения не могут быть преобразованы в плавающее - PullRequest
0 голосов
/ 15 июня 2019

Из учебника это работает:

from matplotlib import pyplot as plt
from astropy.io import fits
from astropy.wcs import WCS
from astropy.utils.data import get_pkg_data_filename

filename = get_pkg_data_filename('tutorials/FITS-images/HorseHead.fits')
hdu = fits.open(filename)[0]

wcs = WCS(hdu.header)

fig = plt.figure()
fig.add_subplot(111, projection=wcs)
plt.imshow(hdu.data, origin='lower', cmap=plt.cm.viridis)

Однако, как только я подключаю свои файлы, он перестает работать. Я использую Google Collab. Этот код правильный - работал до конца

from google.colab import drive
drive.mount('/content/gdrive')
root_path = '/content/gdrive/My Drive/research/HFI_SkyMap_353-psb-field-IQU_2048_R3.00_full.fits'

Затем я использую это в исходном коде из учебника

filename = root_path
hdu = fits.open(filename)[1]

Я пытался конвертировать в float - у меня не получилось. Затем я попытался преобразовать мои данные столбец за столбцом (есть только 3)

a = np.array(hdu.data['I_STOKES'], dtype = float)[1:]
b = np.array(hdu.data['Q_STOKES'], dtype = float)[1:]
c = np.array(hdu.data['U_STOKES'], dtype = float)[1:]

Не работает.

Сообщения об ошибках:

TypeError                                 Traceback (most recent call last)
<ipython-input-11-5b8d0425bb06> in <module>()
     11 fig = plt.figure()
     12 fig.add_subplot(111, projection=wcs)
---> 13 plt.imshow(hdu.data, origin='lower', cmap=plt.cm.viridis)

4 frames
/usr/local/lib/python3.6/dist-packages/matplotlib/pyplot.py in imshow(X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filterrad, imlim, resample, url, data, **kwargs)
   2697         filternorm=filternorm, filterrad=filterrad, imlim=imlim,
   2698         resample=resample, url=url, **({"data": data} if data is not
-> 2699         None else {}), **kwargs)
   2700     sci(__ret)
   2701     return __ret

/usr/local/lib/python3.6/dist-packages/astropy/visualization/wcsaxes/core.py in imshow(self, X, *args, **kwargs)
    195                 kwargs['origin'] = 'lower'
    196 
--> 197         return super().imshow(X, *args, **kwargs)
    198 
    199     def plot_coord(self, *args, **kwargs):

/usr/local/lib/python3.6/dist-packages/matplotlib/__init__.py in inner(ax, data, *args, **kwargs)
   1808                         "the Matplotlib list!)" % (label_namer, func.__name__),
   1809                         RuntimeWarning, stacklevel=2)
-> 1810             return func(ax, *args, **kwargs)
   1811 
   1812         inner.__doc__ = _add_data_doc(inner.__doc__,

/usr/local/lib/python3.6/dist-packages/matplotlib/axes/_axes.py in imshow(self, X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filterrad, imlim, resample, url, **kwargs)
   5492                               resample=resample, **kwargs)
   5493 
-> 5494         im.set_data(X)
   5495         im.set_alpha(alpha)
   5496         if im.get_clip_path() is None:

/usr/local/lib/python3.6/dist-packages/matplotlib/image.py in set_data(self, A)
    632         if (self._A.dtype != np.uint8 and
    633                 not np.can_cast(self._A.dtype, float, "same_kind")):
--> 634             raise TypeError("Image data cannot be converted to float")
    635 
    636         if not (self._A.ndim == 2

TypeError: Image data cannot be converted to float
...