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