( 图表 ) 等高线图
这篇教学会使用 matplotlib pyplot 模组里的 contour() 方法,将数据绘制成等高线图 ( Contour Chart ),并进一步介绍 contour() 的相关用法,以及使用 contourf() 将等高线图变成等高线面积图。
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
import matplotlib
要进行本篇的范例,必须先加载 matplotlib 函数库的 pyplot 模组,范例将其独立命名为 plt。
import matplotlib.pyplot as plt
pyplot.pie() 参数说明
pyplot.contour() 常用的参数如下表所示 ( 完整参数参考:matplotlib.pyplot.contour ):
| 参数 | 说明 |
|---|---|
| x | 必填,等高线图的中心点 x 座标,使用串列格式。 |
| y | 必填,等高线图的中心点 y 座标,使用串列格式。 |
| z | 必填,等高线图的高度,使用串列格式。 |
| levels | 等高线的数量。 |
| colors | 等高线颜色,使用串列格式,若不足 levels 的数量,则会自动重复,不能和 map 同时使用。 |
| cmap | 等高线颜色,使用 colormaps,不能和 colors 同时使用。( 参考:colormaps ) |
| vmin, vmax | 等高线颜色的最小值与最大值。 |
| linewidths | 等高线的粗细。 |
绘制第一张等高线图
下方的程序码,执行后会先使用 x 和 y 画出一个二维的直角座标系统,接着 z 使用二维数组,标记每个位置的高度,最后就会根据数据数据画出等高线图。
import matplotlib.pyplot as plt
x = range(5)
y = range(5)
z = [[0,0,0,0,0],
[0,1,0,0,0],
[0,0,2,0,0],
[0,0,0,0,0],
[0,0,0,0,0]]
plt.contour(x,y,z,levels=5)
plt.show()
绘制更精致的等高线图
参考 matplotlib 官方网站的运算式,搭配 numpy 的 linspace 方法,就能做出更细致的等高线图。
import matplotlib.pyplot as plt
import math
import numpy as np
x = np.linspace(-3, 3, 200) # 產生從 -3~3 共 200 的數值的 x
y = np.linspace(-3, 3, 200) # 產生從 -3~3 共 200 的數值的 y
z = [[(1 - x[i]/2 + x[i]*3 + y[j]*5) * math.exp(-x[i]**2 - y[j]**2) for i in range(200)] for j in range(200)]
# 根據 x 和 y 計算出 z
lv = np.linspace(np.min(z), np.max(z), 20) # 根據 z 的最大值和最小值,定義 level 區間
plt.figure(figsize=(8,6))
plt.contour(x,y,z,levels=lv)
plt.show()
使用 contourf() 绘制等高线面积图
如果将 contour() 换成 contourf(),绘制的图形就会变成“等高线面积图”,下方的程序码执行后,会画出等高线面积图和等高线结合的图表。
import matplotlib.pyplot as plt
import math
import numpy as np
x = np.linspace(-2, 2, 200)
y = np.linspace(-2, 2, 200)
z = [[(1 - x[i]/2 + x[i]*3 + y[j]*5) * math.exp(-x[i]**2 - y[j]**2) for i in range(200)] for j in range(200)]
lv = np.linspace(np.min(z), np.max(z), 10)
plt.figure(figsize=(8,6))
plt.contourf(x,y,z,levels=lv,cmap='Reds') # 等高線面積圖
plt.contour(x,y,z,levels=lv,colors=['#000','#000']) # 等高線圖
plt.show()
微信扫码关注
抖音扫码关注