标签: astropy

如何使用Python将Gaia天体测量数据绘制成TESS图像?

长话短说:我想将盖亚天体测量数据绘制成Python中的TESS图像.这怎么可能?请参阅下面的详细说明.


我有一个64x64像素的TESS星形图像与Gaia ID 4687500098271761792.TESS天文台指南第8页称1像素约为21弧秒.使用Gaia Archive,我搜索这颗星(在顶部特征下面,点击搜索.)并提交查询以查看1000弧秒内的星星,大致是我们需要的半径.我用于搜索的名称Gaia DR2 4687500098271761792如下所示:

在此输入图像描述

提交查询,我得到一个500星的列表RADEC坐标.选择CSV并且Download results,我得到了大约4687500098271761792的星星列表.此结果文件也可以在此处找到.这是我们想要使用的Gaia的输入.

从TESS,我们有4687500098271761792_med.fits,一个图像文件.我们用以下方式绘制它

from astropy.io import fits
from astropy.wcs import WCS
import matplotlib.pyplot as plt
hdul = fits.open("4687500098271761792_med.fits")[0]
wcs = WCS(hdul.header)
fig = plt.figure(figsize=(12,12))
fig.add_subplot(111, projection=wcs)
plt.imshow(hdul.data)
Run Code Online (Sandbox Code Playgroud)

得到一个很好的照片:

在此输入图像描述

和一堆警告,其中大部分都在这里得到了解释(Q中的警告,评论中的解释).

请注意,我们使用WCS投影确实很好.为了检查,让我们只是绘制数据,hdul.data而不关心投影:

plt.imshow(hdul.data)
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

几乎和以前一样,但现在轴的标签只是像素数,而不是RA和DEC,这是更好的选择.第一个图中的DECRA值分别在-72°和16°左右,这是好的,因为Gaia目录给了我们大约这些坐标的 …

python astronomy python-3.x fits astropy

13
推荐指数
1
解决办法
535
查看次数

Astropy matplotlib和情节星系坐标

我试图用python制作一个银河坐标图.假设我有这些数据:

data = [(0.261,-7.123,13.03,'Unidentified'),( - 0.326,77,13.03,'Galaxies')]

每个元组的形式(ra,dec,flux,type).

我被要求使用astropy + matplotlib,所以:

c = SkyCoord(ra = ra*u.degree, dec = dec*u.degree)
galactic = c.galactic
Run Code Online (Sandbox Code Playgroud)

这是我的问题出现的地方,我正在使用此代码:

from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
# lon_0 is central longitude of projection.
# resolution = 'c' means use crude resolution coastlines.
m = Basemap(projection='hammer',lon_0=0,resolution='c')
m.drawcoastlines()
m.fillcontinents(color='coral',lake_color='aqua')
# draw parallels and meridians.
m.drawparallels(np.arange(-90.,120.,30.))
m.drawmeridians(np.arange(0.,420.,60.))
m.drawmapboundary(fill_color='aqua')
plt.title("Hammer Projection")
plt.show()
Run Code Online (Sandbox Code Playgroud)

但是我无法在银河系坐标中绘制数据,我不知道为什么.另外,我需要根据类型和每种不同颜色的不同颜色取决于助焊剂的值.我需要实现这样的东西(我是python的新手,我从来没有使用过熵,我没有找到好的例子):

在此输入图像描述

希望有人能提供帮助.

python plot matplotlib astropy

8
推荐指数
1
解决办法
5043
查看次数

卷积中的伪像

我使用直接卷积算法来计算此图像之间的卷积:

在此输入图像描述

而这个内核:

在此输入图像描述

我正在使用astropy实现直接卷积.

这导致以下卷积,将所有设置(包括边界处理)保留为默认值,即astropy.convolution.convolve(image,kernel):

在此输入图像描述

这个卷积有一些令人费解的文物.特别地,在距边缘约50个像素的偏移处存在"正方形"图案.在我看来,这是由于内核的程度; 即使内核大小正式为249x249,大多数信息显然都包含在大约100个像素的半径内 - 这意味着当内核应用于边缘时,我们可能会遇到麻烦.

这让我想到了我的问题:

  1. 这个假设是否正确 - 它确实是一个边缘问题?
  2. 我该如何解决这个问题?我不知道如何证明使用不同的边缘处理(零填充,插值,包装......)我确定不同的情况需要不同的解决方案,但我不知道如何决定这个...
  3. 只是...试图理解使用直接算法和FFT卷积之间的区别.如果内核和图像大小相同,FT卷积不需要零填充,则不会出现边缘效应.对于直接方法,您将无意中进行一些边缘处理......那么结果是否相等?因为原则上他们的表现应该不同,对吗?

python fft convolution astropy

8
推荐指数
1
解决办法
587
查看次数

使用python查找拟合文件中像素的物理坐标

我想从python脚本中获取给定像素的物理天空坐标.我想使用astropy的WCS,但我会在python中做任何事情.

我试过这两段代码.

from astropy.io import fits
from astropy.wcs import WCS

def astropymethod1(img):
    # from http://astropy.readthedocs.org/en/latest/wcs/
    w = WCS(img)
    lon, lat = w.all_pix2world( 100., 100., 1)
    print lon, lat

def astropymethod2(img):
    # from http://astropy.readthedocs.org/en/latest/wcs/
    hdu = fits.open(img)
    w = WCS(hdu[0].header)
    lon, lat = w.wcs_pix2world(100., 100., 1)
    print lon, lat
Run Code Online (Sandbox Code Playgroud)

问题是我第一次尝试使用WCS时出现错误,结果只是我输入的像素值.

WARNING: FITSFixedWarning: The WCS transformation has more axes (2) than the image it is associated with (0) [astropy.wcs.wcs]
Run Code Online (Sandbox Code Playgroud)

python wcs fits astropy

7
推荐指数
1
解决办法
2628
查看次数

无法再现使用星座获得的源之间的距离值

我有两个来源与赤道坐标(ra, dec)(ra_0, dec_0)位于距离rr_0,我需要计算它们之间的3D距离.

我使用两种方法,据我所知,应该给出相同的结果,但不是.

第一种方法是应用astropyseparation_3d函数.第二种方法是使用表达式给出两个具有球面坐标的源之间的距离:

在此输入图像描述

如图所示这里.

在下面的MCVE中,返回的值是:

91.3427173002 pc
93.8470493776 pc
Run Code Online (Sandbox Code Playgroud)

这两个值不应该相等吗?

MCVE:

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

# Define some coordinates and distances for the sources.
c1 = SkyCoord(ra=9.7*u.degree, dec=-50.6*u.degree, distance=1500.3*u.pc)
c2 = SkyCoord(ra=7.5*u.degree, dec=-47.6*u.degree, distance=1470.2*u.pc)

# Obtain astropy's distance between c1 & c2 coords.
print c1.separation_3d(c2)

# Obtain distance between c1 & …
Run Code Online (Sandbox Code Playgroud)

python coordinates astropy

6
推荐指数
1
解决办法
119
查看次数

将 AstroPy 与 matplotlib 结合使用,由于使用了 plt.colorbar(),我收到一条警告,要求首先调用 grid(False)

尝试从 AstroPy:docs 运行此代码

    import matplotlib.pyplot as plt
    from astropy.visualization import astropy_mpl_style
    plt.style.use(astropy_mpl_style)
    
    from astropy.utils.data import get_pkg_data_filename
    from astropy.io import fits
    
    image_file = get_pkg_data_filename('tutorials/FITS-images/HorseHead.fits')
    fits.info(image_file)
    
    image_data = fits.getdata(image_file, ext=0)
    
    print(image_data.shape)
    
    plt.figure()
    plt.imshow(image_data, cmap='gray')
    
    plt.colorbar()
Run Code Online (Sandbox Code Playgroud)

我收到警告:

第 19 行 plt.colorbar() MatplotlibDeprecationWarning:自 3.5 起,pcolor() 和 pcolormesh() 自动删除网格已被弃用,并将在两个小版本后删除;请先调用 grid(False) 。

我尝试调用 plt.grid(False),但继续收到此警告/错误。有谁知道如何解决这个问题?

python matplotlib astropy

6
推荐指数
1
解决办法
3303
查看次数

如何在 Python 中获取 <property object at 0x...> 的值

我是 Python 新手并在 Windows 上使用 Python 2.7 我正在使用 Astropy 库,但是当我想查看以下类的属性时:

>>> astropy.cosmology.FlatLambdaCDM.Ok0
Run Code Online (Sandbox Code Playgroud)

它返回:

<property object at 0x7fa2c7e206d8>
Run Code Online (Sandbox Code Playgroud)

该对象上的其他属性也是如此。如何访问数值?

python astropy

5
推荐指数
1
解决办法
1万
查看次数

WCS作为使用astropy加载的数据立方体切片的matplotlib投影?

我有一个名为'my_cube.fits'的FITS文件,带有WCS.该文件具有关于轴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)
Run Code Online (Sandbox Code Playgroud)

我一直在使用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()
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我有:

    ...
    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() …
Run Code Online (Sandbox Code Playgroud)

python matplotlib pyfits astropy

5
推荐指数
1
解决办法
933
查看次数

将 matplotlib hexbin 放入 Aitoff 投影

我有下面漂亮的 hexbin 图,但我想知道是否有任何方法可以将 hexbin 放入 Aitoff 投影中?突出的代码是:

import numpy as np
import math
import matplotlib.pyplot as plt
from astropy.io import ascii

filename = 'WISE_W4SNRge3_and_W4MPRO_lt_6.0_RADecl_nohdr.dat'
datafile= path+filename
data = ascii.read(datafile)  
points = np.array([data['ra'], data['dec']])

color_map = plt.cm.Spectral_r 
points = np.array([data['ra'], data['dec']]) 
xbnds = np.array([ 0.0,360.0]) 
ybnds = np.array([-90.0,90.0]) 
extent = [xbnds[0],xbnds[1],ybnds[0],ybnds[1]] 

fig = plt.figure(figsize=(6, 4)) 
ax = fig.add_subplot(111) 
x, y = points 
gsize = 45 
image = plt.hexbin(x,y,cmap=color_map, 
    gridsize=gsize,extent=extent,mincnt=1,bins='log') 

counts = image.get_array() 
ncnts = np.count_nonzero(np.power(10,counts)) 
verts = image.get_offsets() 

ax.set_xlim(xbnds) 
ax.set_ylim(ybnds) 
plt.xlabel('R.A.') …
Run Code Online (Sandbox Code Playgroud)

python matplotlib hexagonal-tiles map-projections astropy

5
推荐指数
1
解决办法
2991
查看次数

如何叠加两个具有不同 WCS/分辨率的 .fits 图像?

我正在尝试从一个物体的一张图像(比如说在波段 A 中)绘制轮廓,在同一物体的较低分辨率图像之上(比如说在波段 Z 中)。

两个图像都是大尺寸文件,因此我必须为每个图像创建一个 2D 剪切图。然而,带 Z 中的图像的像素远少于带 A 的像素。因此,当我尝试在同一个图中绘制它们时,带 Z 中的图像根据像素尺寸绘制,因此左下角非常小该图(参见下面链接中的图)。我需要根据天文角度尺寸而不是像素来绘制这两个图像。

import numpy as np
import matplotlib
%matplotlib inline
import matplotlib.pyplot as plt
from astropy.io import fits
from astropy import units as u
from astropy.coordinates import SkyCoord
from astropy.wcs import WCS
from astropy.nddata import Cutout2D
from reproject import reproject_interp

# Read in .fits images and WCS information
image_a = fits.open("image_a.fits")
image_z = fits.open("image_z.fits")
wcs_a = WCS(image_a.header).celestial
wcs_z = WCS(image_z.header).celestial

# Define object RA and DEC
obj_coords = …
Run Code Online (Sandbox Code Playgroud)

python astronomy fits astropy imshow

5
推荐指数
1
解决办法
7214
查看次数