Matplotlib:如何以正确的方式删除彩条?

Matplotlib: How to remove a color bar the proper way?

我想从轴上删除颜色条,这样轴就会 return 回到默认位置。

为了清楚起见,请看一下这段代码(或更好的运行):

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

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

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

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

# Remove the color bar
colorBar.remove()

plt.show()

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

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

当我删除颜色条时,这不会自动发生。轴仍然在其左侧位置,而不是回到中心。 我该如何实现?

我需要类似 make_axes_locateable 的倒数。

非常感谢:)

make_axes_locatable 将轴定位器设置为新定位器。要反转此步骤,您需要跟踪旧定位器 (original_loc = ax.get_axes_locator()) 并在移除颜色条后将其重置为轴 (ax.set_axes_locator(original_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()