子图中颜色条的高度(matplotlib)

时间:2019-06-26 10:53:35

标签: matplotlib

我们可以使用来更改彩条的高度,宽度和位置:

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的子图中使用它:

enter image description here

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)选项从轴(而不是图形)设置位置,但是它不起作用。

1 个答案:

答案 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()