def plot_cutout(img_path, coord, size, savefile): fl = fits.open(img_path) img = fl[0].data wcs = WCS(fl[0].header).celestial cutout = Cutout2D(img, coord, size, wcs) fig = plt.figure(figsize=(10, 10)) ax = fig.add_axes([0.15, 0.1, 0.8, 0.8], projection=wcs) ra = ax.coords['ra'] ra.set_major_formatter('hh:mm:ss.s') dec = ax.coords['dec'] dec.set_major_formatter('dd:mm:ss.s') ra.ticklabels.set_fontsize(18) dec.ticklabels.set_fontsize(18) plt.imshow(cutout.data, transform=ax.get_transform(wcs), norm=asinh_norm.AsinhNorm()) plt.colorbar() plt.savefig(f'/home/jotter/nrao/plots/IR_cutouts/{savefile}', dpi=400) plt.close()
def inset_overlays(fn, zoomregions, fignum=1, psffn=None, vmin=-0.001, vmax=0.01, bottomleft=coordinates.SkyCoord(83.81108398, -5.375862222, unit=(u.deg, u.deg), frame='fk5'), topright=coordinates.SkyCoord(83.81019142, -5.374623875, unit=(u.deg, u.deg), frame='fk5'), tick_fontsize=pl.rcParams['axes.labelsize']): print(fn) hdu = fits.open(fn)[0] mywcs = wcs.WCS(hdu.header).celestial figure = pl.figure(fignum) figure.clf() ax = figure.add_axes([0.15, 0.1, 0.8, 0.8], projection=mywcs) ra = ax.coords['ra'] ra.set_major_formatter('hh:mm:ss.s') dec = ax.coords['dec'] ra.set_axislabel("RA (ICRS)", fontsize=pl.rcParams['axes.labelsize']) dec.set_axislabel("Dec (ICRS)", fontsize=pl.rcParams['axes.labelsize'], minpad=0.0) ra.ticklabels.set_fontsize(tick_fontsize) ra.set_ticks(exclude_overlapping=True) dec.ticklabels.set_fontsize(tick_fontsize) dec.set_ticks(exclude_overlapping=True) im = ax.imshow(hdu.data.squeeze() * 1e3, transform=ax.get_transform(mywcs), vmin=vmin * 1e3, vmax=vmax * 1e3, cmap=pl.cm.gray_r, interpolation='nearest', origin='lower', norm=asinh_norm.AsinhNorm()) (x1, y1), (x2, y2) = (mywcs.wcs_world2pix( [[bottomleft.icrs.ra.deg, bottomleft.icrs.dec.deg]], 0)[0], mywcs.wcs_world2pix( [[topright.icrs.ra.deg, topright.icrs.dec.deg]], 0)[0]) # we'll want this later #make_scalebar(ax, scalebarpos, # length=(0.5*u.pc / distance).to(u.arcsec, # u.dimensionless_angles()), # color='k', # label='0.5 pc', # text_offset=1.0*u.arcsec, # ) ax.set_aspect(1) ax.axis([x1, x2, y1, y2]) for zoomregion in zoomregions: ZR = zoomregions[zoomregion] parent_ax = zoomregions[ ZR['inset_axes']]['axins'] if 'inset_axes' in ZR else ax bl, tr = ZR['bottomleft'], ZR['topright'], (zx1, zy1), (zx2, zy2) = (mywcs.wcs_world2pix([[bl.ra.deg, bl.dec.deg]], 0)[0], mywcs.wcs_world2pix([[tr.ra.deg, tr.dec.deg]], 0)[0]) print(zoomregion, zx1, zy1, zx2, zy2) inset_data = hdu.data.squeeze()[int(zy1):int(zy2), int(zx1):int(zx2)] #inset_data = hdu.data.squeeze() inset_wcs = mywcs.celestial[int(zy1):int(zy2), int(zx1):int(zx2)] #inset_wcs = mywcs axins = zoomed_inset_axes( parent_ax, zoom=ZR['zoom'], loc=ZR['loc'], bbox_to_anchor=ZR['bbox'], bbox_transform=figure.transFigure, axes_class=astropy.visualization.wcsaxes.core.WCSAxes, axes_kwargs=dict(wcs=inset_wcs)) ZR['axins'] = axins imz = axins.imshow( inset_data, #transform=parent_ax.get_transform(inset_wcs), extent=[int(zx1), int(zx2), int(zy1), int(zy2)], vmin=ZR['min'], vmax=ZR['max'], cmap=pl.cm.gray_r, interpolation='nearest', origin='lower', norm=asinh_norm.AsinhNorm()) ax.axis([x1, x2, y1, y2]) #axins.axis([zx1,zx2,zy1,zy2]) #print(axins.axis()) axins.set_xticklabels([]) axins.set_yticklabels([]) lon = axins.coords['ra'] lat = axins.coords['dec'] lon.set_ticklabel_visible(False) lat.set_ticklabel_visible(False) lon.set_ticks_visible(False) lat.set_ticks_visible(False) # draw a bbox of the region of the inset axes in the parent axes and # connecting lines between the bbox and the inset axes area mark_inset(parent_axes=parent_ax, inset_axes=axins, loc1=ZR['l1'], loc2=ZR['l2'], fc="none", ec="0.5", lw=0.5) figure.canvas.draw() assert np.abs(ax.bbox._bbox.x1 - 0.95) > 1e-4 cax = figure.add_axes([ ax.bbox._bbox.x1 + 0.01, ax.bbox._bbox.y0, 0.02, ax.bbox._bbox.y1 - ax.bbox._bbox.y0 ]) cb = figure.colorbar(mappable=im, cax=cax) #print("1. cb labels: {0}".format([x.get_text() for x in cb.ax.get_yticklabels()])) cb.set_label("$S_{1 mm}$ [mJy beam$^{-1}$]") #print("2. cb labels: {0}".format([x.get_text() for x in cb.ax.get_yticklabels()])) cb.formatter.format = "%3.1f" #print("3. cb labels: {0}".format([x.get_text() for x in cb.ax.get_yticklabels()])) cb.set_ticks(cb.formatter.locs) #print("4. cb labels: {0}".format([x.get_text() for x in cb.ax.get_yticklabels()])) cb.set_ticklabels(["{0:3.1f}".format(float(x)) for x in cb.formatter.locs]) #print("5. cb labels: {0}".format([x.get_text() for x in cb.ax.get_yticklabels()])) cb.ax.set_yticklabels([ "{0:3.1f}".format(float(x.get_text())) for x in cb.ax.get_yticklabels() ]) #print("6. cb labels: {0}".format([x.get_text() for x in cb.ax.get_yticklabels()])) if psffn is not None: psf = fits.open(psffn) psfwcs = wcs.WCS(psf[0].header) cx, cy = psfwcs.celestial.wcs_world2pix(psf_center.ra.deg, psf_center.dec.deg, 0) cx = int(cx) cy = int(cy) dpix = 50 if 'B6' in psffn else 25 zy1 = cy - dpix zy2 = cy + dpix zx1 = cx - dpix zx2 = cx + dpix inset_wcs = psfwcs.celestial[zy1:zy2, zx1:zx2] inset_data = psf[0].data[cy - dpix:cy + dpix, cx - dpix:cx + dpix] axins = zoomed_inset_axes( parent_ax, zoom=zoom, loc=3, # 3: lower left bbox_to_anchor=(0.08, 0.00), bbox_transform=figure.transFigure, axes_class=astropy.visualization.wcsaxes.core.WCSAxes, axes_kwargs=dict(wcs=inset_wcs), ) imz = axins.imshow(inset_data, extent=[int(zx1), int(zx2), int(zy1), int(zy2)], vmin=0, vmax=1, cmap=pl.cm.gray_r, interpolation='nearest', origin='lower', norm=asinh_norm.AsinhNorm()) axins.contour( np.linspace(zx1, zx2, inset_data.shape[1]), np.linspace(zy1, zy2, inset_data.shape[0]), inset_data, levels=[0.05, 0.1, 0.2, 0.3], linewidths=[0.3] * 10, alpha=0.75, #colors=['r']*10, ) axins.set_xticks([]) axins.set_yticks([]) axins.set_xticklabels([]) axins.set_yticklabels([]) lon = axins.coords['ra'] lat = axins.coords['dec'] lon.set_ticklabel_visible(False) lat.set_ticklabel_visible(False) lon.set_ticks_visible(False) lat.set_ticks_visible(False) return figure
dec.set_axislabel("Dec (J2000)", fontsize=pl.rcParams['axes.labelsize'], minpad=0.0) ra.ticklabels.set_fontsize(tick_fontsize) ra.set_ticks(exclude_overlapping=True) dec.ticklabels.set_fontsize(tick_fontsize) dec.set_ticks(exclude_overlapping=True) im = ax.imshow(hdu_line.data.squeeze() * 1e3, transform=ax.get_transform(toplevel_wcs), vmin=vmin_hi[line], vmax=vmax_hi[line], cmap=pl.cm.gray_r, interpolation='nearest', origin='lower', norm=asinh_norm.AsinhNorm()) tr_fk5 = ax.get_transform("fk5") #(x1,y1),(x2,y2) = (1200,434),(2142,1743) # wrong (x1,y1),(x2,y2) = tr_fk5.transform_point([bottomleft.ra.deg, bottomleft.dec.deg]),tr_fk5.transform_point([topright.ra.deg, topright.dec.deg]) (x1, y1), (x2, y2) = (toplevel_wcs.wcs_world2pix( [[bottomleft.ra.deg, bottomleft.dec.deg]], 0)[0], toplevel_wcs.wcs_world2pix( [[topright.ra.deg, topright.dec.deg]], 0)[0]) make_scalebar( ax, scalebarpos, length=(0.5 * u.pc / distance).to(u.arcsec, u.dimensionless_angles()), color='k', label='0.5 pc',
ra.set_ticks(exclude_overlapping=True) dec.ticklabels.set_fontsize(tick_fontsize) dec.set_ticks(exclude_overlapping=True) # manual normalization... data = hdu.data.squeeze()*1e3 #data[data<1.5] = 0 #data[data>4000] = 4000 #ldata = np.log10(data) im = ax.imshow(data, transform=ax.get_transform(mywcs), cmap=pl.cm.gray_r, origin='lower', interpolation='nearest', vmin=vmin, vmax=vmax, norm=asinh_norm.AsinhNorm(), #matplotlib.colors.LogNorm(), ) cont = ax.contour(data, transform=ax.get_transform(mywcs), colors=['w']*10, levels=np.linspace(vmax, truemax, 5), ) tr_fk5 = ax.get_transform("fk5") #(x1,y1),(x2,y2) = (1200,434),(2142,1743) # wrong (x1,y1),(x2,y2) = tr_fk5.transform_point([bottomleft.ra.deg, bottomleft.dec.deg]),tr_fk5.transform_point([topright.ra.deg, topright.dec.deg]) bottomleft = coordinates.SkyCoord("17:47:36.2", "-28:27:00.0", unit=(u.h, u.deg), frame='fk5') topright = coordinates.SkyCoord("17:47:03.1", "-28:20:00.0", unit=(u.h, u.deg), frame='fk5') (x1,y1),(x2,y2) = (mywcs.wcs_world2pix([[bottomleft.ra.deg, bottomleft.dec.deg]],0)[0], mywcs.wcs_world2pix([[topright.ra.deg, topright.dec.deg]],0)[0]
# define field zoom region for the large-scale field field_corners = {'fullfield': {'bottomleft': coordinates.SkyCoord("5:38:48.102", "-7:10:34.015", unit=(u.h, u.deg), frame='fk5'), 'topright': coordinates.SkyCoord("5:33:12.020", "-4:49:59.662", unit=(u.h, u.deg), frame='fk5'), } } # define colormaps & norms cmaps = {'fullfield': pl.cm.gray_r} norms = {'fullfield': asinh_norm.AsinhNorm()} # define colorbar labels (i.e., units) cb_labels = {'12CO': "$T_B$ [K]"} # or something like: "$S_{3 mm}$ [mJy beam$^{-1}$]"} # Loop over the large-scale regions, one figure per region for regionname in ('fullfield', ): legloc = leglocs[regionname] leg_bbox = legbboxes[regionname] for line in ("12CO",): hdu_line = fits.open(filenames[line])[0]
TR_pix = mywcs.all_world2pix(83.805*u.degree, -5.3715*u.degree, 0) cut_img = img[:int(TR_pix[1]), :int(TR_pix[0])] fig = plt.figure(figsize=(10,10)) ax = fig.add_axes([0.15,0.1,0.8,0.8],projection=mywcs) ra = ax.coords['ra'] ra.set_major_formatter('hh:mm:ss.s') #ra.set_major_formatter('d.ddd') dec = ax.coords['dec'] dec.set_major_formatter('dd:mm:ss.s') #dec.set_major_formatter('d.ddd') ra.ticklabels.set_fontsize(18) dec.ticklabels.set_fontsize(18) ax.imshow(cut_img, origin='lower', transform=ax.get_transform(mywcs), norm=asinh_norm.AsinhNorm(), vmin=-0.001, vmax=0.005) E18_pix = mywcs.all_world2pix(E18_table['RA']*u.degree, E18_table['DEC']*u.degree, 0) B3_pix = mywcs.all_world2pix(B3_table['RA_B3']*u.degree, B3_table['DEC_B3']*u.degree, 0) for ind in range(len(B3_pix[0])): if B3_pix[0][ind] < TR_pix[0] and B3_pix[1][ind] < TR_pix[1]: circ = Circle((B3_pix[0][ind], B3_pix[1][ind]), radius=100, fill=False, color='red') ax.add_patch(circ) #ax.text(B3_pix[0][ind]-1, B3_pix[1][ind]+3, B3_table['D_ID'][ind], color='red') for ind in range(len(E18_pix[0])): circ = Circle((E18_pix[0][ind], E18_pix[1][ind]), radius=110, fill=False, color='orange') ax.add_patch(circ) #ax.axis([0,len(img),0,len(img)])