概述
说到添加子图,大家都会想到使用 Figure.add_axes()
方法,该方法能够在一个 Figure 对象的任意位置添加一个 Axes 对象,这些 Axes 对象是平级的,只是位置不同,那么如果想在一个子图上再嵌套一个子图呢?这个需求使用 Figure.add_axes()
方法就无法实现。
使用嵌套子图和在图中添加数据表的目的一致,都是为了帮助大家更好的理解数据,从多个角度显示同一个数据,这样才能更加全面地了解数据的本质。在 matplotlib 中,添加嵌套子图的方法是使用 Axes.inset_axes()
方法,该方法的定义如下:
Axes.inset_axes(bounds, *, transform=None, zorder=5, **kwargs)
参数说明:
- bounds:指定插入的 Axes 对象的左下角坐标和长宽;
- projection:指定插入的 Axes 对象的投影方式;
- polar:指定是否使用极坐标系,该参数等同于
projection='polar'
; - zorder:指定插入的 Axes 对象的 Z 轴高度;
- kwargs:传递 Axes 关键字参数;
- 返回值:插入的 Axes 对象。
示例
接下来将以一个示例帮助大家更好的理解嵌入子图,使用的数据是通过正态分布函数得出(均值 75,标准差 15) ,示例完整代码如下:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
plt.style.use("classic")
x = np.linspace(1, 100, 200)
y = np.random.normal(75.0, 15.0, 200)
fig, ax = plt.subplots(1, 1)
fig.set_facecolor("#FFF")
ax.plot(x, y, ls='-', lw=3, color='#2878b5')
child_ax = ax.inset_axes((0.4, 0.75, 0.35, 0.2))
child_ax.hist(y, bins=5, facecolor='#c82423', edgecolor='k')
plt.show()
画图结果如下: