我正在使用现有代码创建一个带有一个轴的matplotlib图形,然后使用make_axes_locatable
和append_axes
在其后添加颜色栏。它有效,但是我想随后更改颜色条的垂直高度。我发现只有在色标轴上调用set_axes_locator(None)
方法时才有可能(不能100%确定原因)---如果不这样做,则任何对cax.set_position()
的调用默默无所事事。这是设置;问题如下:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colorbar import ColorbarBase
from mpl_toolkits.axes_grid1 import make_axes_locatable
data = np.random.randint(4, size=(5, 7))
def make_figure(data, shrink):
fig, ax = plt.subplots()
ax.imshow(data)
divider = make_axes_locatable(ax)
cax = divider.append_axes('right', size='5%', pad=0.1)
cmap = ax.images[0].get_cmap()
_ = ColorbarBase(cax, cmap=cmap, norm=None, orientation='vertical')
if shrink:
shrink_colorbar(cax)
return fig
def shrink_colorbar(cax):
pos = cax.get_position().bounds
new_height = pos[-1] - 0.4
new_y = pos[1] + 0.2
newpos = (pos[0], new_y, pos[2], new_height)
cax.set_axes_locator(None)
cax.set_position(newpos)
如果我在创建图形的函数环境中在 中调整颜色条的大小,则无论使用常规的Python REPL还是使用iPython,每次都会得到错误的结果:
make_figure(data, shrink=True)
错误结果:
如果我先创建图形,然后再缩小颜色栏,那么只要这些行分别运行(在带有{{1的常规Python REPL中, }},或者如果每一行都在单独的iPython单元格中):
plt.ion()
正确的结果:
如果这些相同的行作为单个iPython单元运行,或者在常规Python REPL中以fig = make_figure(data, shrink=False)
cax = fig.axes[-1]
shrink_colorbar(cax)
运行,然后以plt.ioff()
运行,则我得到的错误结果与上述第一个示例相同(在外部函数中使用plt.show()
)。
如何在仍在函数内部调整颜色栏大小(而不是在用户区中)的同时获得正确的结果?