Pyplot:覆盖轴周围的空间

问题描述 投票:0回答:1

我想有一个带有轴标签的叠加网格。但是,当我这样做时,叠加网格的标签与标题和颜色条重叠。

目前,我有以下内容:

 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的值。

python-3.x matplotlib astropy
1个回答
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)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.