Я хотел бы иметь сетку наложения с метками осей. Однако, когда я это делаю, метки сетки наложения перекрываются с заголовком и цветовой полосой.
На данный момент у меня есть следующее:
from astropy.wcs import WCS
from astropy.io import fits
from astropy.utils.data import get_pkg_data_filename
import matplotlib.pyplot as plt
image_file = get_pkg_data_filename('tutorials/FITS-images/HorseHead.fits')
hdu = fits.open(image_file)[0]
wcs = WCS(hdu.header)
ax = plt.subplot(projection=wcs)
im = ax.imshow(hdu.data, origin='lower')
overlay = ax.get_coords_overlay('galactic')
overlay.grid(color='black', ls='dotted')
overlay[0].set_axislabel('Galactic Longitude')
overlay[1].set_axislabel('Galactic Latitude')
plt.colorbar(im)
plt.title("Horsehead nebula")
plt.show()
Но здесь цветная полоса перекрывается с правой меткой, а заголовок оказывается под верхней меткой. Как правильно расположить элементы на этом рисунке?
Есть ли функция, противоположная plt.tight_layout()?
Я бы предпочел не возиться с установкой значений интервала вручную. Я хочу, чтобы интервал был сделан в зависимости от размера различных элементов.
Например, я знаю, что могу сделать fig.colorbar(im, pad=padvalue), но я хочу, чтобы значение для padvalue находилось автоматически.





constrained_layout следует поместить цветовую полосу справа от любых детей-художников ax1.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, num=100)
y = x ** 2 + 10 * np.random.randn(100)
f, ax1 = plt.subplots(1,1,figsize=(6,4),
constrained_layout=True)
im1 = ax1.scatter(x, y*1000, c=y, cmap='magma')
ax1.yaxis.tick_right()
f.colorbar(im1, ax=ax1)
plt.subplots(constrained_layout=True) дает мне TypeError: __init__() got an unexpected keyword argument 'constrained_layout'Вам нужен matplotlib >= 2.2.
Если оверлей используется как дочерние художники топора, тогда constrained_layout должен поместить цветовую полосу справа от всех дочерних элементов в осях.