Matplotlib 实现画中画
需要导入的包 inset_axes
要实现画中画,即在原画轴上添加新轴,需要用到mpl_toolkits.axes_grid1.inset_locator
的inset_axes
.
基本用法
new_axis=inset_axes(parent_axes, width, height, loc='upper right',borderpad=0.5)
参数说明
parent_axes:父轴,即背景轴;
width:新轴宽度
height:新轴高度
loc:新轴在父轴上位置,包括:
str | code |
---|---|
'upper right' | 1 |
'upper left' | 2 |
'lower left' | 3 |
'lower right' | 4 |
'right' | 5 |
'center left' | 6 |
'center right' | 7 |
'lower center' | 8 |
'upper center' | 9 |
'center' : | 10 |
======================================
可以写做loc='upper right'
或者loc=1
。
borderpad:新轴与父轴间距。
完整代码
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
plt.rcParams['font.family'] = 'Noto Sans CJK JP'
plt.rcParams['axes.unicode_minus'] = False
def fun_power(x):
c = np.exp(-(x ** 2))
return c
def picture_in_picture():
x0 = np.linspace(0, 20, 200)
x2 = np.linspace(0, 2 * np.pi, 200)
y1 = np.cos(x0)
y4 = fun_power(x2)
fig, axes = plt.subplots(figsize=(40, 20))
ax1 = plt.subplot()
num = np.arange(0, 0.5, 0.1) * np.pi
for i in num:
y = y1 * fun_power(i)
symbol = (i / np.pi)
ax1.plot(x0, y, label='y={}'.format(symbol.round(1)) + r'$\times\pi$')
plt.legend()
plt.title('多元函数'+r'$:z=\sin{x}\times e^{-y^2}$')
plt.ylim(-2,1.5)
plt.grid()
new_ax = inset_axes(ax1, width="40%", height="20%", loc='lower right', borderpad=5)
new_ax.plot(x2, y4)
num = ['{}'.format(i / 2) for i in range(0,5,1)]
x_labels = [i + r'$\pi$' for i in num]
plt.xticks(np.arange(0, 2 * np.pi + 0.01, np.pi / 2), labels=x_labels)
plt.yticks(np.arange(0, 1.1, 0.2))
plt.title('放大因子'+r'$:e^{-y^2}$')
plt.grid()
plt.savefig('potential.pdf')
plt.show()
if __name__ == '__main__':
picture_in_picture()