python - 将 matplotlib hexbin 放入 Aitoff 投影

标签 python matplotlib map-projections astropy hexagonal-tiles

我在下面有漂亮的 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.')  
plt.ylabel(r'Decl.') 
plt.grid(True) 
cb = plt.colorbar(image, spacing='uniform', extend='max') 
plt.show()

我试过了:

plt.subplot(111, projection="aitoff")

在执行 plt.hexbin 命令之前,但这只给出了一个漂亮但空白的 Aitoff 网格。

enter image description here

最佳答案

问题是 Aitoff 投影使用弧度,从 -π 到 +π。不是从 0 到 360 的度数。我使用 Angle.wrap_at 函数来实现这一点,根据 this Astropy example (它基本上告诉您如何创建适当的 Aitoff 投影图)。

此外,您不能更改轴限制(这会导致错误),并且不应使用 extent(正如 ImportanceOfBeingErnest 的回答也指出的那样)。

您可以按如下方式更改代码以获得您想要的内容:

import numpy as np
import matplotlib.pyplot as plt
from astropy.io import ascii
from astropy.coordinates import SkyCoord
from astropy import units

filename = 'WISE_W4SNRge3_and_W4MPRO_lt_6.0_RADecl_nohdr.dat'
data = ascii.read(filename)
coords = SkyCoord(ra=data['ra'], dec=data['dec'], unit='degree')
ra = coords.ra.wrap_at(180 * units.deg).radian
dec = coords.dec.radian

color_map = plt.cm.Spectral_r
fig = plt.figure(figsize=(6, 4))
fig.add_subplot(111, projection='aitoff')
image = plt.hexbin(ra, dec, cmap=color_map,
                   gridsize=45, mincnt=1, bins='log')

plt.xlabel('R.A.')
plt.ylabel('Decl.')
plt.grid(True)
plt.colorbar(image, spacing='uniform', extend='max')
plt.show()

哪个给 enter image description here

关于python - 将 matplotlib hexbin 放入 Aitoff 投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46320712/

相关文章:

graph - Pyplot-正值​​和负值的条形图

python - DataFrame的表格保存为图片时如何让图片清晰

matplotlib - 使用 Mollweide 投影的 Pylab 等高线图创建人工制品

Python 创建保存按钮,将编辑后的版本保存到同一文件(不是另存为)

python - 使用 str.split 拆分 pandas 中的列并保留值

python - 调用 Python 函数而不向其传递参数 - animate(i)

java - 实现 Google 墨卡托(球形墨卡托)

Oanda API Rest V20 的 Python 代码问题 - 无法运行自动代码

python - 如何从 pandas 数据框中选择要绘制的列而不寻址其名称

python - 如何从等距柱状投影绘制正射投影