Barbs中的transform_first是一个可以对元素进行转换的方法,可以使用它来修改元素或对元素进行计算并返回新元素。
示例如下:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.transforms import Bbox, TransformedBbox, \
blended_transform_factory, IdentityTransform
from mpl_toolkits.axes_grid1 import Size, Divider
from mpl_toolkits.axes_grid1.mpl_axes import Axes
fig1 = plt.figure(figsize=(6, 4))
# create a new GridSpec
gs = fig1.add_gridspec(2, 2)
ax1 = fig1.add_subplot(gs[0, :])
ax1.set_title('ax1')
ax2 = fig1.add_subplot(gs[1, 0])
ax2.set_title('ax2')
ax3 = fig1.add_subplot(gs[1, 1])
ax3.set_title('ax3')
# this divider only takes into account ax1
divider1 = Divider(fig1, gs[0, :], horiz_size=Size.AxesHeight(ax1),
vert_size=Size.AxesWidth(ax1))
caxs = [fig1.add_axes(rect, label='cax%d' % i) for i, rect in
enumerate(divider1.get_horizontal())]
# create the MultiAxesImage by specifying the position of ax1
multi = MultiAxesImage(fig1, [IdentityTransform()], [ax1], z=1, norm=cmap.norm, cmap=cmap, origin=origin,
interpolation=interpolation)
# connect the cbar axes to each of the MultiAxesImage axes
for cax, im in zip(caxs, multi.images):
fig1.colorbar(im, cax=cax)
# OPTIONAL: create a single Bbox that covers all the fig1 axes (ax1, ax2, ax3) and the colorbar axes
bbox = Bbox.union([ax1.get_position(original=True),
ax2.get_position(original=True),
ax3.get_position(original=True),
*[cax.get_position(original=True) for cax in caxs]])
# adjust the size of all the fig1 axes so they fit in the space left after adding the colorbar axes
for ax in [ax1