matplotlib之等高线图

matplotlib之等高线图_第1张图片

文章目录

  • 等高线图:
  • contour
  • 示例说明:
  • 扩展应用
    • 颜色填充
    • 绘制等高线值
    • 轮廓线颜色和样式
  • 总结

等高线图:

等高线也称“水平图”)指的是地形图上高程相等的相邻各点所连成的闭合曲线。把地面上海拔高度相同的点连成的闭合曲线,并垂直投影到一个水平面上,并按比例缩绘在图纸上,就得到等高线。
等高线也是一种在二维平面上显示 3D 图像的方法。等高线有时也被称为 “Z 切片”,如果您想要查看因变量 Z 与自变量 X、Y 之间的函数图像变化(即 Z=f(X,Y)),那么采用等高线图最为直观

contour

  1. 函数定义:
matplotlib.pyplot.contour(*args, data=None, **kwargs)

通用格式: matplotlib.pyplot.contour([X, Y,] Z, [levels], **kwargs)

  1. 常用参数:
  • 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()

运行结果:
matplotlib之等高线图_第2张图片
从图中可以很明显看出这个等高线是一个嵌套的同心圆,同一圆上的为相同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之等高线图_第3张图片

绘制等高线值

matplotlib.pyplot.clabel() 方法用于给等高线添加标记。

下面以双峰线f(x,y)=e^(-(x - 2) ^2 - (y - 2) ^2))+2 * e^(-x ^2 - y ^2),看看因变量 Z 与自变量 X、Y 之间的函数图像变化,下图为双峰的三维形状。
matplotlib之等高线图_第4张图片

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()

运行结果如下:
matplotlib之等高线图_第5张图片
从上图可以明显看出等高线是二维平面上显示 3D 图像,即从三维坐标系中延Z轴在X-Y平面的投影。

轮廓线颜色和样式

matplotlib.pyplot.contour() 方法中,

  • colors 参数即可为等高线轮廓设置颜色,可以是单色,也可以是一个颜色列表,
  • linestyles 参数可以设置轮廓线样式,注意,如果线条颜色为单色,则负等高线(高度值为负)默认为虚线。
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()

运行结果如下:
matplotlib之等高线图_第6张图片

总结

等高线的通常的使用场景:

  • 等高线图常用在展示某地地形情况

  • 等高线图也可以计算当地山地高低情况

  • 等高线图常用于地质、地理勘察绘制而成

  • 等高线图也可以用于绘制圆形、椭圆形等数学公式展示

你可能感兴趣的:(matplotlib系列,matplotlib,数据分析,等高线图,contour,contourf)