matplotlib:使用轴\网格1创建颜色栏时,将颜色栏缩短一半

matplotlib:使用轴\网格1创建颜色栏时,将颜色栏缩短一半,matplotlib,colorbar,Matplotlib,Colorbar,我想把色条缩短一半。有人知道怎么做吗?我尝试了cax.get_position()和cax.set_position(),但这个方法不起作用 此外,由轴_grid1创建的轴似乎与原始轴具有相同的bbox位置。这是虫子吗 另外,我必须使用axes_grid1创建色条轴,因为我需要在之后使用tight_layout(),tight_layout()只适用于axes_grid1创建的轴,而不适用于add_axes()创建的轴 轴分割器的整个点是分割轴,为新轴留出空间。这可确保所有轴具有相同的包围盒。这

我想把色条缩短一半。有人知道怎么做吗?我尝试了cax.get_position()和cax.set_position(),但这个方法不起作用

此外,由轴_grid1创建的轴似乎与原始轴具有相同的bbox位置。这是虫子吗

另外,我必须使用axes_grid1创建色条轴,因为我需要在之后使用tight_layout(),tight_layout()只适用于axes_grid1创建的轴,而不适用于add_axes()创建的轴


轴分割器的整个点是分割轴,为新轴留出空间。这可确保所有轴具有相同的包围盒。这就是你看到正在打印的盒子

在图中的特定位置创建颜色条的一些常用方法如所示。这里的问题似乎是能够调用
紧密布局
。这可以通过以下两个选项实现。(可能还有其他人。)

A.使用gridspec 我不太确定这里的确切要求,但是使用普通的网格布局似乎更符合您的需要

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

fig = plt.figure()
gs = gridspec.GridSpec(2, 2, width_ratios=[95,5],)

ax = fig.add_subplot(gs[:, 0])

im = ax.imshow(np.arange(100).reshape((10,10)))

cax = fig.add_subplot(gs[1, 1])
fig.colorbar(im, cax=cax, ax=ax)
plt.tight_layout()
plt.show()

B.使用
轴\u网格1
如果您真的需要使用
轴\u网格1
,它可能会变得有点复杂

import matplotlib.pyplot as plt
import matplotlib.axes
from mpl_toolkits.axes_grid1 import make_axes_locatable, Size
import numpy as np

fig, ax = plt.subplots()

im = ax.imshow(np.arange(100).reshape((10,10)))

divider = make_axes_locatable(ax)

pad = 0.03
pad_size = Size.Fraction(pad, Size.AxesY(ax))

xsize = Size.Fraction(0.05, Size.AxesX(ax))
ysize = Size.Fraction(0.5-pad/2., Size.AxesY(ax))

divider.set_horizontal([Size.AxesX(ax), pad_size, xsize])
divider.set_vertical([ysize, pad_size, ysize])

ax.set_axes_locator(divider.new_locator(0, 0, ny1=-1))


cax = matplotlib.axes.Axes(ax.get_figure(),
                 ax.get_position(original=True))
locator = divider.new_locator(nx=2, ny=0)
cax.set_axes_locator(locator)

fig.add_axes(cax)

fig.colorbar(im, cax=cax)

plt.tight_layout()
plt.show()

轴分割器的整个点是分割轴,为新轴留出空间。这可确保所有轴具有相同的包围盒。这就是你看到正在打印的盒子

在图中的特定位置创建颜色条的一些常用方法如所示。这里的问题似乎是能够调用
紧密布局
。这可以通过以下两个选项实现。(可能还有其他人。)

A.使用gridspec 我不太确定这里的确切要求,但是使用普通的网格布局似乎更符合您的需要

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

fig = plt.figure()
gs = gridspec.GridSpec(2, 2, width_ratios=[95,5],)

ax = fig.add_subplot(gs[:, 0])

im = ax.imshow(np.arange(100).reshape((10,10)))

cax = fig.add_subplot(gs[1, 1])
fig.colorbar(im, cax=cax, ax=ax)
plt.tight_layout()
plt.show()

B.使用
轴\u网格1
如果您真的需要使用
轴\u网格1
,它可能会变得有点复杂

import matplotlib.pyplot as plt
import matplotlib.axes
from mpl_toolkits.axes_grid1 import make_axes_locatable, Size
import numpy as np

fig, ax = plt.subplots()

im = ax.imshow(np.arange(100).reshape((10,10)))

divider = make_axes_locatable(ax)

pad = 0.03
pad_size = Size.Fraction(pad, Size.AxesY(ax))

xsize = Size.Fraction(0.05, Size.AxesX(ax))
ysize = Size.Fraction(0.5-pad/2., Size.AxesY(ax))

divider.set_horizontal([Size.AxesX(ax), pad_size, xsize])
divider.set_vertical([ysize, pad_size, ysize])

ax.set_axes_locator(divider.new_locator(0, 0, ny1=-1))


cax = matplotlib.axes.Axes(ax.get_figure(),
                 ax.get_position(original=True))
locator = divider.new_locator(nx=2, ny=0)
cax.set_axes_locator(locator)

fig.add_axes(cax)

fig.colorbar(im, cax=cax)

plt.tight_layout()
plt.show()