Matplotlib 等值线图,等值线图或等高线图在科学界很常用,这种可视化方法用一圈圈封闭的曲线组成的等值线图表示三维结构的表面,其中封闭的曲线表示的是一个个处于同一层级或z
值相同的数据点。
阅读本章内容可以先了解极客教程的前面几个章节介绍的Matplotlib
相关知识:饼图,条形图,直方图,线性图,添加图例。
虽然等值线图看上去结构很复杂,其实用matplotlib
实现起来并不复杂,
- 首先,用
z=f(x,y)
函数生成三维结构。 - 然后,定义 x, y 的取值范围,确定要显示的区域。
- 接着,使用函数
f(x, y)
函数计算每一对(x,y)
所对应的z
值,得到一个z
值矩阵。 - 最后,用函数
contour()
生成三维结构表面的等值线图。
定义颜色表,为等值线图添加不同颜色,也就是用渐变色填充等值线划分成的区域,效果会更好。如下所示,用逐渐加深的蓝色阴影表示负数,随着数值的增大,逐渐改成黄色,甚至红色。
import matplotlib.pyplot as plt
import numpy as np
def f(x, y):
return (1 - y**5 + x**5) * np.exp(-x**2 - y**2)
dx = 0.01;dy=0.01
x = np.arange(-2.0, 2.0, dx)
y = np.arange(-2.0, 2.0, dy)
X, Y = np.meshgrid(x, y)
plt.title("geek-docs.com", fontsize=20, fontname="Times New Roman")
C = plt.contour(X, Y, f(X,Y), 8, colors='black')
plt.contourf(X, Y, f(X, Y), 8)
plt.clabel(C, inline=1, fontsize=10)
plt.show()
输出结果如下所示,等值线图可以表示一个表明的z
值信息。
实际应用中,要从多种颜色中选定你需要的颜色,把它赋给cmp
参数。此外,如若使用等值线图,在该图的一侧增加图例作为对图表中所有颜色的说明也是必需的。在代码的最后添加colorbar()
函数即可实现该功能。
如下所示,图表使用了另外一种颜色表,先是由黑色过度到红色,再过度到黄色,最后最大值使用白色。这种彩图中,将plt.cm.hot
设置给cmap
参数。
import matplotlib.pyplot as plt
import numpy as np
def f(x, y):
return (1 - y**5 + x**5) * np.exp(-x**2 - y**2)
dx = 0.01;dy=0.01
x = np.arange(-2.0, 2.0, dx)
y = np.arange(-2.0, 2.0, dy)
X, Y = np.meshgrid(x, y)
plt.title("geek-docs.com", fontsize=20, fontname="Times New Roman")
C = plt.contour(X, Y, f(X,Y), 8, colors='black')
plt.contourf(X, Y, f(X, Y), 8, cmap=plt.cm.hot)
plt.clabel(C, inline=1, fontsize=10)
plt.colorbar()
plt.show()
输出结果如下,用表示“热度”的颜色表可增强等值线图的吸引力。
极客教程相关文章推荐:
Matplotlib 饼图
Matplotlib 水平条形图
Matplotlib 条形图
Matplotlib 直方图
Matplotlib 线性图
Matplotlib 添加图例
Matplotlib 添加文本