上回介绍 matplotlib 这个关键的库是画折线图的时候Mike:【python碎碎念】matplotlib 超好用的画图库zhuanlan.zhihu.com
今天我们还是用 matplotlib 这个库讲一讲等高线。等高线函数位于 plt (matplotlib.pyplot) 下的 contour 或 contourf,f 代表 fill,即,有填充。
首先,当你绘制等高线的时候,你需要思考这几件事情。
1、你需要哪些基本元素作为输入?
这个简单,我们需要有坐标 (x,y) 的绘制范围,我们需要有高度 z = f(x,y) 这个函数。
2、在绘图的时候,计算机需要知道什么样的信息?
我们需要告诉计算机,当海拔到了哪些值的时候,我们绘制等高线。
好,很简单。当你想清楚这几个问题的时候,我们就可以开始了。
首先,这几个库你需要导入。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
我个人认为,numpy 和 matplotlib 这两个库,你需要非常熟练。你不应该在网上查看别人的代码,才能知道这几句话怎么写。
def height(x,y):
return np.exp(-(x-2)**2-(y-2)**2) + 1.2*np.exp(-x**2-y**2)
相信对数学敏感的朋友一下子就能看出来,这是一个双峰等高线。一个局部最优点,一个全局最优点。
x = np.arange(-1.5,3.5,0.1)
y = np.arange(-1.5,3.5,0.1)
X,Y = np.meshgrid(x,y)
Z = height(X,Y)
接下来我们要绘制网格了,请注意小写的 x,y 是一维向量,而大写的 X,Y 已经变成矩阵了。我们通过 print 函数直观感受一下感受 X 到底是什么。
接下来,我们需要指定等高线在什么样的 value 情况下出现。请注意,由于等高线是实数值,我们不能直接用 range,而是要用 np.arange
N = np.arange(-0.2, 1.5, 0.1)
好的,现在万事俱备,我们开始画图
CS = plt.contourf(Z,N,linewidth=2,cmap=mpl.cm.jet)
plt.colorbar(CS)
plt.show()
请注意你可以把 mpl.cm.jet 理解成一种配色方式,常用的有 jet 和 rainbow。
最终效果如下,很简单。