等高线

阅读: 2853     评论:0

我们经常在二维图上用等高线来表示三维数据,Matplotlib提供了三个函数来实现这一功能:

  • plt.contour: 绘制等高线
  • plt.contourf: 绘制带有填充色的等高线
  • plt.imshow: 显示图形
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='blue')

img

contour函数需要三个基本参数:x、y、z轴三个坐标轴的网格数据。x与y轴表示图形中的位置,而z轴通过等高线的等级来表示。

当图形中只使用一种颜色的时候,会使用虚线来表示负数,实线表示正数。

我们可以将数据范围等分,比如10份,然后设置camp参数定义一个线条颜色的配色方案,用不同的颜色表示等高线。

plt.contour(X, Y, Z, cmap='RdGy')
plt.colorbar()

img

RdGy红-灰配色方案(Red-Gray)。Matplotlib有很多配色方案可选,都在plt.cm模块里,使用plt.cm.<tab>可以查看有哪些方案。

上面的图形里,线条之间的间隙比较大,可以通过contourf方法进行填充(注意方法名多了个f):

plt.contourf(X, Y, Z, cmap='RdGy')
plt.colorbar()

img

我们还可以通过imshow方法,将二维数组渲染成渐变图:

plt.imshow(Z, extent=[0,5,0,5], origin='lower',cmap='RdGy')
plt.colorbar()
plt.axis(aspect='image')

img

  • imshow不支持使用x和y轴的数据设置网格,必须通过extend参数设置图形的坐标范围xmin、xmax,ymin、ymax
  • imshow默认使用标准的图形数组定义,原点位于左上角,类似浏览器。而不是绝大多数等高线的左下角
  • imshow会自动调整坐标轴的精度以适应数据显示。可以通过plt.axis(aspect='image')来设置x与y轴的单位。

最后,我们还可以使用clabel方法,将一幅背景半透明的彩色图与另一幅坐标相同、带数据标签的等高线叠放在一起,画出相当高端的图形:

contours = plt.contour(X,Y,Z,3,colors='black') # 分3级
plt.clabel(contours,inline=True, fontsize=8)  # 内部带数值文字

plt.imshow(Z, extent=[0,5,0,5], origin='lower',cmap='RdGy', alpha=0.5)
plt.colorbar()

img

现在你或许会有感悟,绘图画到最后,缺少的不是工具,而是创意灵感。


 误差线 多子图 

评论总数: 0


点击登录后方可评论