Matplotlib contourf():绘制等高线(附带实例)
等高线图是在地理课中讲述山峰山谷时绘制的图形,在机器学习中也会被用在绘制梯度下降算法的图形中。等高线图有三个信息:x,y 以及 x,y 所对应的高度值。
这个高度值的计算我们用一个函数来表述:
【实例】利用 plt.contourf() 函数画等高线。

图 1 等高线
如果想显示热力图,只要在 plt.contourf() 函数中添加属性 cmap=plt.cm.hot 就能显示,其中 cmap 代表 color map,我们把 color map 映射成 hot(热力图),此处关键代码为:

图 2 热力图
上面代码是用 plt.contourf() 填充了等高线,但还有一种方式是可以直接显示等高线,而不是填充的方式,例如:

图 3 直接显示等高线
plt.contour() 函数调用参数中的 20 代表的是显示等高线的密集程度,数值越大,画的等高线数就越多。
如果我们不调用前面的 plt.contourf() 函数,就会直接显示等高线。接着实现在等高线中添加标注值:

图 4 为等高线添加标注值
这个高度值的计算我们用一个函数来表述:
# 计算 x,y 坐标对应的高度值 def f(x, y): return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2)要画出等高线,Matplotlib 中提供 plt.contourf() 函数来实现,但在这个函数中输入的参数是 x,y对应的网格数据以及此网格对应的高度值,因此还需要调用 np.meshgrid(x, y)把 x,y 值转换成网格数据才行。
【实例】利用 plt.contourf() 函数画等高线。
import numpy as np import pandas as pd import matplotlib.pyplot as plt plt.rcParams['axes.unicode_minus'] = False # 计算 x,y 坐标对应的高度值 def f(x, y): return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2) # 生成 x,y 的数据 n = 256 x = np.linspace(-3, 3, n) y = np.linspace(-3, 3, n) # 把 x,y 的数据生成 mesh 网格状的数据,因为等高线的显示是在网格的基础上添加上高度值 X, Y = np.meshgrid(x, y) # 填充等高线 plt.contourf(X, Y, f(X, Y)) # 显示图表 plt.show()运行程序,效果如下图所示:

图 1 等高线
如果想显示热力图,只要在 plt.contourf() 函数中添加属性 cmap=plt.cm.hot 就能显示,其中 cmap 代表 color map,我们把 color map 映射成 hot(热力图),此处关键代码为:
# 填充等高线 plt.contourf(X, Y, f(X, Y), cmap=plt.cm.hot)运行程序,效果如下图所示:

图 2 热力图
上面代码是用 plt.contourf() 填充了等高线,但还有一种方式是可以直接显示等高线,而不是填充的方式,例如:
C = plt.contour(X, Y, f(X, Y), 20)运行程序,效果如下图所示:

图 3 直接显示等高线
plt.contour() 函数调用参数中的 20 代表的是显示等高线的密集程度,数值越大,画的等高线数就越多。
如果我们不调用前面的 plt.contourf() 函数,就会直接显示等高线。接着实现在等高线中添加标注值:
# 填充等高线 plt.contourf(X, Y, f(X, Y), 20, cmap=plt.cm.hot) # 添加等高线 C = plt.contour(X, Y, f(X, Y), 20) plt.clabel(C, inline=True, fontsize=12) # 显示图表 plt.show()运行程序,效果如下图所示:

图 4 为等高线添加标注值