Python Matplotlib:如何以正确的方式删除颜色栏?

Python Matplotlib:如何以正确的方式删除颜色栏?,python,matplotlib,axes,colorbar,divider,Python,Matplotlib,Axes,Colorbar,Divider,我想从轴上移除一个颜色条,这样轴就会返回到默认位置 为了清楚起见,请查看此代码(或者更好地运行它): 如您所见,发生了以下情况:在我将颜色栏添加到轴的那一刻,轴本身正在稍微改变其位置。它将向左移动以为颜色栏创建一些空间。在更复杂的情况下,例如在Gridspec中,它也可能会稍微更改其大小 我想要得到的是:在我再次移除颜色条的那一刻,我想要让轴回到它原来的位置(和它原来的大小) 当我移除颜色栏时,这不会自动发生。轴仍在其左侧位置,而不是回到中心。 我如何做到这一点 我需要类似于使轴可定位的倒数的东

我想从轴上移除一个颜色条,这样轴就会返回到默认位置

为了清楚起见,请查看此代码(或者更好地运行它):

如您所见,发生了以下情况:在我将颜色栏添加到轴的那一刻,轴本身正在稍微改变其位置。它将向左移动以为颜色栏创建一些空间。在更复杂的情况下,例如在Gridspec中,它也可能会稍微更改其大小

我想要得到的是:在我再次移除颜色条的那一刻,我想要让轴回到它原来的位置(和它原来的大小)

当我移除颜色栏时,这不会自动发生。轴仍在其左侧位置,而不是回到中心。 我如何做到这一点

我需要类似于
使轴可定位
的倒数的东西


非常感谢:)

使轴可定位
将轴定位器设置为新定位器。要反转此步骤,您需要跟踪旧定位器(
original\u loc=ax.get\u axes\u locator()
),并在移除色条后将其重置为轴(
ax.set\u axes\u locator(original\u loc)

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

# Init figure
fig, ax = plt.subplots()
ax.set_aspect(1)

# Create some random stuff
image = ax.imshow(np.random.random((10, 10)))
plt.pause(2)

# Add a color bar to the axes
original_loc = ax.get_axes_locator()
cax = make_axes_locatable(ax).append_axes("right", size="5%", pad=0.05)
colorBar = fig.colorbar(image, cax=cax)
colorBar.ax.tick_params(length=0, labelright=False)
plt.pause(2)

# Remove the color bar
colorBar.remove()
ax.set_axes_locator(original_loc)
plt.pause(0.0001)

plt.show()

对我来说,这看起来像是一场灾难。也许你可以告诉我们更多关于你试图通过这个复杂的设置实现什么。也许一个更好的办法是首先防止颜色条调整轴的大小?是的,我有一个复杂的例子,在Gridspec(2x4)中有许多轴。他们中的一些人会得到一个色条,其他人不会。我需要更改具有颜色条的轴的大小,以便轴+颜色条与没有颜色条的轴具有相同的大小。稍后,我将再次删除一些颜色栏,我希望轴恢复其原始大小和位置。这种情况不会发生。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable

# Init figure
fig, ax = plt.subplots()
ax.set_aspect(1)

# Create some random stuff
image = ax.imshow(np.random.random((10, 10)))
plt.pause(2)

# Add a color bar to the axes
original_loc = ax.get_axes_locator()
cax = make_axes_locatable(ax).append_axes("right", size="5%", pad=0.05)
colorBar = fig.colorbar(image, cax=cax)
colorBar.ax.tick_params(length=0, labelright=False)
plt.pause(2)

# Remove the color bar
colorBar.remove()
ax.set_axes_locator(original_loc)
plt.pause(0.0001)

plt.show()