等高线也称“水平图”)指的是地形图上高程相等的相邻各点所连成的闭合曲线。把地面上海拔高度相同的点连成的闭合曲线,并垂直投影到一个水平面上,并按比例缩绘在图纸上,就得到等高线。
等高线也是一种在二维平面上显示 3D 图像的方法。等高线有时也被称为 “Z 切片”,如果您想要查看因变量 Z 与自变量 X、Y 之间的函数图像变化(即 Z=f(X,Y)),那么采用等高线图最为直观
matplotlib.pyplot.contour(*args, data=None, **kwargs)
通用格式: matplotlib.pyplot.contour([X, Y,] Z, [levels], **kwargs)
X:
Y: X, Y类似数组,可选参数。为参数Z中各值的x和y坐标
Z:绘制轮廓的高度值;
levels:确定轮廓线/区域的数量和位置;
colors:等高线的颜色,颜色字符串或颜色序列
cmap: 等高线的颜色,字符串或者 Colormap
alpha: 设置透明色,浮点,默认值1,介于0(透明)和1(不透明)之间;
origin:通过指定 Z[0,0] 的位置来确定 Z 的方向和确切位置,仅当未指定 X, Y 时才有意义
None :Z[0,0] 位于左下角的 X=0, Y=0 处
‘lower’ :Z [0, 0] 位于左下角的 X = 0.5, Y = 0.5 处
‘upper’ :Z[0,0] 位于左上角的 X=N+0.5, Y=0.5 处
‘image’ :使用 rcParams[“image.origin”] = ‘upper’ 的值
antialiased: 是否启用抗锯齿渲染,默认 True
linewidths: 等高线的线宽,如果是数字,则所有等高线都将使用此线宽。如果是序列,则将按指定的顺序以升序打印线宽。默认为 rcParams[“lines.linewidth”] = 1.5
linestyles:等高线的样式,如果线条颜色为单色,则负等高线默认为虚线
contour的详细定义:
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.contour.html#matplotlib.pyplot.contour
通过产生一组随机数进行示例说明
import numpy as np
import matplotlib.pyplot as plt
"""
np.linspace()在指定的大间隔内[-4.0,4.0],返回固定间隔100个数据
"""
x = np.linspace(-4.0, 4.0, 100)
y = np.linspace(-4.0, 4.0, 100)
"""
np.meshgrid()两个坐标轴上的点在平面上画格,产生一个以向量x为行,向量y为列的矩
"""
X, Y = np.meshgrid(x, y)
#定义Z与X,Y之间的关系,即原方程x²+y²=r²
Z = np.sqrt(X**2 + Y**2)
fig,ax = plt.subplots(figsize=(6,6))
#画等高线
plt.contour(X,Y,Z)
plt.show()
运行结果:
从图中可以很明显看出这个等高线是一个嵌套的同心圆,同一圆上的为相同Z值。
通过contourf函数进行色彩填充
matplotlib.pyplot.contourf(*args, data=None, **kwargs)
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.contourf.html
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
"""
font:设置中文
"""
matplotlib.rcParams['font.family'] = ['Heiti TC']
"""
np.linspace()在指定的大间隔内[-4.0,4.0],返回固定间隔100个数据
"""
x = np.linspace(-4.0, 4.0, 100)
y = np.linspace(-4.0, 4.0, 100)
"""
np.meshgrid()两个坐标轴上的点在平面上画格,产生一个以向量x为行,向量y为列的矩
"""
X, Y = np.meshgrid(x, y)
#定义Z与X,Y之间的关系,即原方程x²+y²=r²
Z = np.sqrt(X**2 + Y**2)
fig,axes=plt.subplots(1,2,figsize=(16,9))
axes[0].contour(X, Y,Z, alpha = 0.75, cmap = plt.cm.hot)
axes[0].set_title('等高线')
axes[1].contourf(X, Y, Z,cmap = plt.cm.hot)
axes[1].set_title('等高线图填充颜色')
fig.colorbar(cp)
plt.show()
matplotlib.pyplot.clabel() 方法用于给等高线添加标记。
下面以双峰线f(x,y)=e^(-(x - 2) ^2 - (y - 2) ^2))+2 * e^(-x ^2 - y ^2),看看因变量 Z 与自变量 X、Y 之间的函数图像变化,下图为双峰的三维形状。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
"""
font:设置中文
"""
matplotlib.rcParams['font.family'] = ['Heiti TC']
"""
np.linspace()在指定的大间隔内[-2,4],返回固定间隔1000个数据
"""
x = np.linspace(-2, 4, 1000)
y = np.linspace(-2, 4, 1000)
"""
np.meshgrid()两个坐标轴上的点在平面上画格,产生一个以向量x为行,向量y为列的矩
"""
X, Y = np.meshgrid(x, y)
#双峰函数
Z = np.exp(-(X - 2) ** 2 - (Y - 2) ** 2) + 1.2 * np.exp(-X ** 2 - Y ** 2)
fig,ax=plt.subplots(figsize=(6,6))
C = ax.contour(X, Y, Z, cmap=matplotlib.cm.jet)
plt.clabel(C)
plt.title('等高线图设置等高线值')
plt.show()
运行结果如下:
从上图可以明显看出等高线是二维平面上显示 3D 图像,即从三维坐标系中延Z轴在X-Y平面的投影。
matplotlib.pyplot.contour() 方法中,
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
"""
font:设置中文
"""
matplotlib.rcParams['font.family'] = ['Heiti TC']
"""
np.linspace()在指定的大间隔内[-2,4],返回固定间隔1000个数据
"""
x = np.linspace(-2, 4, 1000)
y = np.linspace(-2, 4, 1000)
"""
np.meshgrid()两个坐标轴上的点在平面上画格,产生一个以向量x为行,向量y为列的矩
"""
X, Y = np.meshgrid(x, y)
#双峰函数
Z = np.exp(-(X - 2) ** 2 - (Y - 2) ** 2) + 1.2 * np.exp(-X ** 2 - Y ** 2)
fig,ax=plt.subplots(figsize=(6,6))
colors = ['k', 'r', 'g', 'b']
# 绘制等高线图,8 个数据间隔,颜色为黑色,线条样式为 --
C = ax.contour(X, Y, Z,8, colors=colors, linestyles='--')
# 添加标记,标记处不显示轮廓线,颜色为黑红绿蓝四种,保留两位小数
plt.clabel(C, inline=True, colors=colors, fmt='%1.2f')
plt.title('等高线图设置颜色/样式示例')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
等高线的通常的使用场景:
等高线图常用在展示某地地形情况
等高线图也可以计算当地山地高低情况
等高线图常用于地质、地理勘察绘制而成
等高线图也可以用于绘制圆形、椭圆形等数学公式展示