我尝试使用由fits标头提供并由astropy的WCS获得的坐标来绘制图像。

from astropy import wcs
import numpy as np
import matplotlib.pyplot as plt
hdr = r[1].header #r ist the repsective fits files, I copied content "w" at the end of the page
w = wcs.WCS(hdr)
ax = plt.subplot(projection=w)
ax.imshow(np.ones((100,100)),origin='lower')

ax.tick_params(axis='x', which='major', labelsize='large',width=25)
ax.tick_params(axis='y', which='major', labelsize='large')
plt.show()


python - 子图投影覆盖tick_params-LMLPHP

可以看到tick_params被忽略了。

我会做同样的事情,但是要关闭投影,即:

ax = plt.subplot()
ax.imshow(np.ones((100,100)),origin='lower')

ax.tick_params(axis='x', which='major', labelsize='large',width=25)
ax.tick_params(axis='y', which='major', labelsize='large')
plt.show()


python - 子图投影覆盖tick_params-LMLPHP

Tick_params再次正常工作。

知道这里可能出什么问题吗?

WCS是:

 print(w)
 WCS Keywords

 Number of WCS axes: 2
 CTYPE : 'RA---TAN'  'DEC--TAN'
 CRVAL : 266.41798186205955  -29.006968367892327
 CRPIX : 248.5  340.0
 NAXIS : 497  680

最佳答案

WCS投影完全替代了matplotlib轴,请参见Ticks, tick labels, and grid lines。因此,您不能再使用matplotlib方法,或者至少不能期望它们对实际图有任何影响。

相反,将需要使用WCS的方法。
因此,如果

ax = plt.subplot(projection=wcs)


WCSAxesSubplot,则x轴为ax.coords[0],y轴为ax.coords[1]。然后您可以设置ticklabel的大小

ax.coords[0].set_ticklabel(size="large")


刻度线宽度为

ax.coords[0].set_ticks(width=25)


set_ticklabelset_ticks这两个方法是astropy.visualization.wcsaxes.coordinate_helpers.CoordinateHelper类的方法。我不确定是否对可用方法有完整的引用,但是您可能总是会查看the source code来检查公开了哪些方法。

一些完整的示例(基于文档中的one of the examples):

import matplotlib.pyplot as plt

from astropy.wcs import WCS
from astropy.io import fits
from astropy.utils.data import get_pkg_data_filename

filename = get_pkg_data_filename('galactic_center/gc_msx_e.fits')

hdu = fits.open(filename)[0]
wcs = WCS(hdu.header)

ax = plt.subplot(projection=wcs)

ax.imshow(hdu.data, vmin=-2.e-5, vmax=2.e-4, origin='lower')

ax.coords.grid(True, color='white', ls='solid')
ax.coords[0].set_axislabel('Galactic Longitude')
ax.coords[1].set_axislabel('Galactic Latitude')

ax.coords[0].set_ticks(width=25)
ax.coords[0].set_ticklabel(size="large")

plt.show()


python - 子图投影覆盖tick_params-LMLPHP

关于python - 子图投影覆盖tick_params,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48621085/

10-12 22:06