我们可以使用来更改彩条的高度,宽度和位置:
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np
fig = plt.figure()
ax = plt.subplot(111)
im = ax.imshow(np.arange(100).reshape((10, 10)))
c = plt.colorbar(im, cax = fig.add_axes([0.78, 0.5, 0.03, 0.38]))
来自here,
我将在add_axes and transorm的子图中使用它:
fig, axs = plt.subplots(nrows=1, ncols=2)
im0 = axs[0].imshow(np.arange(100).reshape((10, 10)), cmap='afmhot')
c = plt.colorbar(im0, cax=fig.add_axes([0.45, 0.52, 0.03, 0.2],
transform=axs[0].transAxes))
# transform=axs[0].transAxes) does not make any difference
im1 = axs[1].imshow(np.arange(100).reshape((10, 10)), cmap='afmhot_r')
c = plt.colorbar(im1, cax=fig.add_axes([0.87, 0.52, 0.03, 0.2]))
我将使用transform(transAxes)选项从轴(而不是图形)设置位置,但是它不起作用。
答案 0 :(得分:1)
首先,从add_axes
文档中,
rect:浮点序列
新轴的尺寸[左,下,宽度,高度]。 所有数量都在 图形宽度和高度的分数。
这是您的代码无法正常工作的原因。
您可以改用inset_axes
。
inset_axes(self, bounds, transform=None, ...)
bounds
:[x0,y0,宽度,高度]
插入轴的左下角及其宽度和高度。
transform
:转换
默认为ax.transAxes,即rect的单位在相对于轴的坐标中。
此处的边界默认为轴坐标单位,但可以根据需要更改。
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
im = ax.imshow(np.arange(100).reshape((10, 10)))
cax = ax.inset_axes([0.78, 0.5, 0.03, 0.38])
cb = fig.colorbar(im, cax = cax)
plt.show()
上述替代方法是使用mpl_toolkits.axes_grid1.inset_locator.inset_axes
。
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
import numpy as np
fig, ax = plt.subplots()
im = ax.imshow(np.arange(100).reshape((10, 10)))
cax = inset_axes(ax, "100%", "100%", bbox_to_anchor=[0.78, 0.5, 0.03, 0.38],
bbox_transform=ax.transAxes, borderpad=0)
cb = fig.colorbar(im, cax = cax)
plt.show()