通常您不想使用轴的绝对位置,因为这可能(正如您发现的)根据其他艺术家绘制的或放置在画布中的图形而变化。
如果目标是将颜色条定位在轴下方,一个有用的方法是使用mpl_toolkits.axes_grid1.make_axes_locatable
如所见这个官方的例子 https://matplotlib.org/examples/axes_grid/demo_axes_divider.html.
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import scipy.misc
from mpl_toolkits.axes_grid1 import make_axes_locatable
fig = plt.figure(1)
fig.set_tight_layout(True)
gs = gridspec.GridSpec(2,2)
ax = plt.subplot(gs[0,0])
lena = scipy.misc.face()
im = ax.imshow(lena)
divider = make_axes_locatable(ax)
ax_cb = divider.new_vertical(size="5%", pad=0.3, pack_start=True)
fig.add_axes(ax_cb)
fig.colorbar(im, cax=ax_cb, orientation="horizontal")
plt.show()
请注意,这绝对兼容tight_layout
设置轴时add_axes
is not.
您可以通过使用第二次调用进一步划分轴来创建更多错误栏divider.new_vertical
.
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import scipy.misc
from mpl_toolkits.axes_grid1 import make_axes_locatable
fig, axes = plt.subplots(2,2)
fig.set_tight_layout(True)
lena = scipy.misc.face()
for i, ax in enumerate(axes.flatten()):
im = ax.imshow(lena)
divider = make_axes_locatable(ax)
ax_cb = divider.new_vertical(size="10%", pad=0.3, pack_start=True)
ax_cb2 = divider.new_vertical(size="10%", pad=0.3, pack_start=True)
fig.add_axes(ax_cb)
fig.colorbar(im, cax=ax_cb, orientation="horizontal")
if i % 2 - 1:
fig.add_axes(ax_cb2)
fig.colorbar(im, cax=ax_cb2, orientation="horizontal")
plt.show()
编辑问题的编辑部分:
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import scipy.misc
from mpl_toolkits.axes_grid1 import make_axes_locatable
fig, axes = plt.subplots(2,2)
fig.set_tight_layout(True)
lena = scipy.misc.face()
for i, ax in enumerate(axes.flatten()):
im = ax.imshow(lena)
divider = make_axes_locatable(ax)
ax_cb = divider.new_vertical(size="8%", pad=0.3, pack_start=True)
ax_cb2 = divider.new_vertical(size="8%", pad=0.02, pack_start=True)
if i == 2:
fig.add_axes(ax_cb)
fig.colorbar(im, cax=ax_cb, orientation="horizontal")
fig.add_axes(ax_cb2)
fig.colorbar(im, cax=ax_cb2, orientation="horizontal")
ax_cb.tick_params(bottom=False,labelbottom=False)
if i == 3:
fig.add_axes(ax_cb)
fig.colorbar(im, cax=ax_cb, orientation="horizontal")
plt.show()