目的是在主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边框。