长话短说:我想将盖亚天体测量数据绘制成Python中的TESS图像.这怎么可能?请参阅下面的详细说明.
我有一个64x64像素的TESS星形图像与Gaia ID 4687500098271761792.TESS天文台指南第8页称1像素约为21弧秒.使用Gaia Archive,我搜索这颗星(在顶部特征下面,点击搜索.)并提交查询以查看1000弧秒内的星星,大致是我们需要的半径.我用于搜索的名称Gaia DR2 4687500098271761792
如下所示:
提交查询,我得到一个500星的列表RA
和DEC
坐标.选择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,这是更好的选择.第一个图中的DEC
和RA
值分别在-72°和16°左右,这是好的,因为Gaia目录给了我们大约这些坐标的 …
我试图用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的新手,我从来没有使用过熵,我没有找到好的例子):
希望有人能提供帮助.
我使用直接卷积算法来计算此图像之间的卷积:
而这个内核:
我正在使用astropy实现直接卷积.
这导致以下卷积,将所有设置(包括边界处理)保留为默认值,即astropy.convolution.convolve(image,kernel):
这个卷积有一些令人费解的文物.特别地,在距边缘约50个像素的偏移处存在"正方形"图案.在我看来,这是由于内核的程度; 即使内核大小正式为249x249,大多数信息显然都包含在大约100个像素的半径内 - 这意味着当内核应用于边缘时,我们可能会遇到麻烦.
这让我想到了我的问题:
我想从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) 我有两个来源与赤道坐标(ra, dec)
和(ra_0, dec_0)
位于距离r
和r_0
,我需要计算它们之间的3D距离.
我使用两种方法,据我所知,应该给出相同的结果,但不是.
第一种方法是应用astropy的separation_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) 尝试从 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 新手并在 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)
该对象上的其他属性也是如此。如何访问数值?
我有一个名为'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) 我有下面漂亮的 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) 我正在尝试从一个物体的一张图像(比如说在波段 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) astropy ×10
python ×10
matplotlib ×4
fits ×3
astronomy ×2
convolution ×1
coordinates ×1
fft ×1
imshow ×1
plot ×1
pyfits ×1
python-3.x ×1
wcs ×1