随着技术的进步,大家要求的水平也越来越高,比如看一个问题,不再从一个角度去分析问题,而是要求从多个角度来分析问题。同理,当你在写论文时,也需要让数据从多个角度来分析,多个角度来显示同一个数据,这样才会更全面地解析问题的本质,以及发现新的理论。又或者老师想让一个数据展示给学生看,也需要从多个方面来显示数据的属性。从一些有名专家论文里,经常看到配图里有嵌套子图的显示,看到这些图时,对问题的理解非常有帮助,能够很全面地解析所需要说明的问题。
如果让你来做一些论文的配图,需要使用嵌套子图来实现,你又会做了吗?
好吧,现在还不会不要紧,赶紧跟着本文来学会,将来一定会轻松地解决的。
比如实现像下面的插图:
在这个绘图里,首先主图里显示一条曲线,接着在主图里左上角显示了该曲线的直方图,通过两个绘图,就可以理解曲线的形状,以及那些点分布的频率问题。
要理解这些功能的实现,需要详细地分析代码的实现:
fig, host = plt.subplots() #创建子图
host.grid(False)
这两行是创建一个子图,以及把子图的网格线关闭掉。
x = np.linspace(1, 100, 200)
y = np.random.normal(75.0, 15.0, 200)
前面一行代码是把1到100的区间分割出200个点,形成X轴的坐标;接着第二行代码调用正态分布函数,生成200个数据,均值为75,标准差为15,形成Y轴的数据。
host.plot(x, y, ls = '-', lw = 2, color = 'b')
host.set_ylim(10, 170)
接着把x和y数据显示出来,指定线的类型ls为实线,线的宽度lw为2个像素点,颜色为蓝色。同时把Y轴的显示范围限制为10到170之间。
plt.axes([0.2, 0.6, 0.2, 0.2], facecolor = 'k')
这行代码是构造一个嵌套的子图,调用axes来创建一个新坐标系,位置由列表[0.2, 0.6, 0.2, 0.2],前景颜色为黑色,k是表示黑色。
count, bins, patchs = plt.hist(y, 20, color = 'r')
这行代码是调用计算直接方图,并且在嵌套子图里绘制出来,分为20个小方格,颜色使用红色。
plt.ylim(0, 28)
这行代码是设置嵌套子图的Y轴显示范围为0到28.
plt.xticks([])
plt.yticks([])
这两行代码是去掉子图里的X轴和Y轴的刻度线。
通过上面简单的代码,就可以实现嵌套子图的实现了,看起也不是很难的事情,你学会了吗?
整个例子完整的代码如下:
import numpy as np
import matplotlib.pyplot as plt
#
fig, host = plt.subplots() #创建子图
host.grid(False)
#
x = np.linspace(1, 100, 200)
y = np.random.normal(75.0, 15.0, 200)
host.plot(x, y, ls = '-', lw = 2, color = 'b')
host.set_ylim(10, 170)
#
plt.axes([0.2, 0.6, 0.2, 0.2], facecolor = 'k')
count, bins, patchs = plt.hist(y, 20, color = 'r')
plt.ylim(0, 28)
plt.xticks([])
plt.yticks([])
plt.show()