plt.contour函数需要三个参数:x 轴,y轴,z轴三个坐标轴的网格数据。x轴和y轴表示图形中的位置,而z轴将通过等高线的等级来表示。用np.meshgrid函数来准备这些数据可能是最简单的方法,它可以从一维数组构建二维网格数据:
import matplotlib.pyplot as plt import numpy as np plt.style.use('seaborn-white') def f(x, y): return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x) 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')当图中只有一种颜色时,默认使用虚线表示负数,使用实线表示正数。另外,还可以设置一个线条配色方案来自定义颜色。还可以让更多的线条显示不同的颜色——可以将数据范围分为20份,然后用不同的颜色表示:
plt.contour(X, Y, Z, 20, cmap='RdGy') # "RdGy" 红-灰的缩写使用plt.imshow时的一些注意事项:
plt.show() 不支持使用x轴和y轴数据设置网格,而是必须通过extent参数设置图形的坐标范围[xmin, xmax, ymin, ymax]。plt.show() 默认使用标准的图形数组定义,就是原点位于左上角,而不是绝大多数等高线图中使用的左下角。plt.imshow() 会自动调整坐标轴的精度一适应数据显示。可以通过plt.axis(aspect=‘image’)来设置z轴与y轴的单位。plt.clabel()函数 :https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.clabel.html#matplotlib.pyplot.clabel
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()