在日常展示、报告或者文献撰写过程中,数据经常需要用图来直观表达或者支撑观点。不知道大家有没有遇到这种情况:需要将图中的某些细节在原图中进行放大、一起展示,这就造成要在图中再次画图的情况,今天就来谈谈如何在Python中使用matplotlib绘图库来绘制图中图。
01
思路解析
首先,画图是将数据映射到坐标系上,因此画图中图就是在一张图上建立两个坐标系来展示数据,但是要注意这两个坐标系是有一定联系的。这里我将原有的较大的图称为父图,需要聚焦展示的较小的图称为子图。
画父图就按照一般的绘图方法画出来就行,但是对于子图就需要考虑以下几个问题了:
展示哪些数据?
图放在哪?
图有多大?
怎样和父图联系?
其中,第一个问题是我们根据具体需求制定的,本文不涉及这部分内容。第二、三个问题都与建立坐标系有关,最后一个是在完成父子图绘制后要考虑的问题。
我们将这些问题归纳到三个步骤中去解决,
画出父图
画出子图
建立图之间的联系
针对步骤2、3,有两种方法可以实现,并且我自己在应用中没有发现明显的差别,这里就将这两种方法介绍给大家。
02
父图绘制
画父图和其他基本画图方法一致,这里先将父图画出来:
import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.axes_grid1.inset_locator import mark_insetfrom mpl_toolkits.axes_grid1.inset_locator import inset_axesx = np.linspace(0, 2*np.pi, 30)y_1 = np.sinc(x)+0.7y_2 = np.tanh(x)y_3 = np.exp(-np.sinc(x))fig, ax = plt.