[ Matplotlib version: 3.2.1 ]
在二维图上用等高线图或者彩色图来表示三维数据是个不错的方法。
Matplotlib提供三个函数来解决这个问题:
plt.contour
画等高线图plt.contourf
画带有填充色的等高线图(filled contour plot)的色彩plt.imshow
显示图形%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-white')
import numpy as np
# 首先用函数z=f(x,y)演示一个等高线图
def f(x, y):
return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)
等高线图可以用plt.contour
函数来创建。它需要三个参数:x轴、y轴、z轴三个坐标轴的网格数据。x轴与y轴表示图形中的位置,而z轴将通过等高线的等级来表示。
用np.meshgrid
函数准备数据是最简单的方法,它可以从一维数组构建二维网格数据
x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 40)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
# 生成等高线图
plt.contour(X, Y ,Z, colors='black')
可以用cmap
参数设置一个线条配色方案自定义颜色,还可以让更多的线条显示不同的颜色(plt.cm
+Tab查看更多颜色)
# 可以将数据范围等分为20份,并用不同颜色表示
plt.contour(X, Y, Z, 20, cmap='RdGy')
plt.contourf()
函数来填充等高线图plt.contourf(X, Y, Z, 20, cmap='RdGy')
plt.colorbar()
plt.imshow()
函数来处理,将二维数组渲染成渐变图plt.imshow(Z, extent=[0, 5, 0, 5], origin='lower', cmap='RdGy')
plt.colorbar()
plt.axis(aspect='image')
函数plt.imshow()
:
plt.imshow()
不支持用x轴和y轴数据设置网格,而是必须通过extent
参数设置图形的坐标范围[xmin, xmax, ymin, ymax]
plt.imshow()
默认使用标准的图形数组定义,就是原点位于左上角,而不是绝大多数等高线图中使用的左下角,这一点在显示网格数据图形的时候必须调整plt.imshow()
会自动调整坐标轴的精度以使用数据显示,可以通过axis(aspect='image')
来设置x轴与y轴的单位contours = plt.contour(X, Y, Z, 3, colors='black')
plt.clabel(contours, inline=True, fontsize=8)
plt.imshow(Z, extent=[0, 5, 0, 5], origin='lower', cmap='RdGy', alpha=0.5)
plt.colorbar()
alpha
参数设置透明度)plt.clabel()
函数实现)Matplotlib 相关阅读:
[Python3] Matplotlib —— (一) 入门基础
[Python3] Matplotlib —— (二) 简易线形图
[Python3] Matplotlib —— (三) 简易散点图
[Python3] Matplotlib —— (四) 可视化异常处理
总结自《Python数据科学手册》