我想要一个带有轴标签的覆盖网格。但是,当我这样做时,覆盖网格的标签与标题和颜色栏重叠。
目前,我有以下内容:
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
的值。
答案 0 :(得分:1)
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)