在绘图axes旁边添加额外的colorbar的ax的方法(add_colorbar_axes)

目的是在主axes中绘制图形时,需要在旁边新建colorbar,因为直接使用 fig.colorbar()
会直接占用主图的一部分区域,所以需要def几个解决这一问题的函数。

import matplotlib.pyplot as plt
import matplotlib as mpl
from psutil import cpu_count

首先引入所需包。

def add_box(ax, ls, color, alpha):
    '''用红框标出一个ax的范围.
    ax, ls, color, alpha
    '''
    axpos = ax.get_position()
    rect = mpl.patches.Rectangle(
        (axpos.x0, axpos.y0), axpos.width, axpos.height,
        lw=3, ls=ls, ec=color, fc='none', alpha=alpha,
        transform=ax.figure.transFigure
    )
    ax.patches.append(rect)

定义函数为绘图区域添加带颜色边框。

def add_right_cax(ax, pad, width):
    '''
    在一个ax右边追加与之等高的cax.
    pad是cax与ax的间距.
    width是cax的宽度.
    '''
    axpos = ax.get_position()
    caxpos = mpl.transforms.Bbox.from_extents(
        axpos.x1 + pad,
        axpos.y0,
        axpos.x1 + pad + width,
        axpos.y1
    )
    cax = ax.figure.add_axes(caxpos)

    return cax

def add_up_cax(ax, pad, height):
    '''
    在一个ax上边追加与之等宽的cax.
    pad是cax与ax的间距.
    height是cax的宽度.
    往上是加
    '''
    axposition = ax.get_position()
    caxposition = mpl.transforms.Bbox.from_extents(
        axposition.x0,
        axposition.y1 + pad,
        axposition.x1,
        axposition.y1 + pad + height
    )
    cax = ax.figure.add_axes(caxposition)
    return cax


def add_down_cax(ax, pad, height):
    '''
    在一个ax上边追加与之等宽的cax.
    pad是cax与ax的间距.
    height是cax的宽度.
    '''
    axposition = ax.get_position()
    caxposition = mpl.transforms.Bbox.from_extents(
        axposition.x0,
        axposition.y0 - pad - height,
        axposition.x1,
        axposition.y0 - pad 
    )
    cax = ax.figure.add_axes(caxposition)
    return cax

定义三个添加cax的函数,其中pad均为和主ax的间距,
另外,(x0,y0)指的是左下角的边界点(见下文);(x1,y1)指的是右上角的边界点(见下文)。

fig = plt.figure(1)
ax0 = fig.add_subplot(111)

axposition = ax0.get_position()
print(axposition)
ax0.plot(axposition.x0,axposition.y0, '*')
ax0.text(axposition.x0+0.02,axposition.y0, '(x0,y0)')
ax0.plot(axposition.x1,axposition.y1, '*')
ax0.text(axposition.x1-0.05,axposition.y1-0.05, '(x1,y1)')

这里是在图中绘制出三个点的位置。

cax_0 = add_right_cax(ax0, pad=0.05, width=0.05)
cax_1 = add_down_cax(ax0, pad=0.08, height=0.05)
cax_2 = add_up_cax(ax0, pad=0.05, height=0.05)

cax_1.minorticks_off()
cax_0.minorticks_off()
cax_2.minorticks_off()

cax_0.set_yticklabels([])
cax_1.set_xticklabels([])
cax_2.set_xticklabels([])

添加三个cax区域。

add_box(ax=cax_0, ls='-', color='r', alpha=0.5)
add_box(ax=cax_1, ls='-.', color='b', alpha=0.5)
add_box(ax=cax_2, ls='--', color='m', alpha=0.5)

plt.show()

为三个cax添加带颜色的box边框。

结果如图所示

add_cax

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值