首页 > 编程笔记 > Python笔记 阅读:2

Matplotlib contourf():绘制等高线(附带实例)

等高线图是在地理课中讲述山峰山谷时绘制的图形,在机器学习中也会被用在绘制梯度下降算法的图形中。等高线图有三个信息:x,y 以及 x,y 所对应的高度值。

这个高度值的计算我们用一个函数来表述:
# 计算 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 为等高线添加标注值

相关文章