随着学习的深入,对绘制等高线图的需求逐渐显现。
为此,大家一起学习一下等高线图的基本绘制教程。
【1】官网教程
首先依然是打开官网,跟着官方进行学习。网址如下:
https://matplotlib.org/stable/gallery/images_contours_and_fields/contour_demo.html
官网在这一各页面给出了好几种等高线图。
天下难事,必作于易。天下大事,必作于细。先从读懂基础教程的代码开始。
【2】代码解读
首先依然是numpy和matplotlib的引入:
import matplotlib.pyplot as plt #引入matplotlib模块画图 import numpy as np #引入numpy模块做数学计算 import matplotlib.cm as cm #cm即是colormap,引入该模块支持渐变颜色绘制
然后定义了自变量参数和因变量:
delta = 0.025 #定义常量theta=0.025 x = np.arange(-3.0, 3.0, delta) #定义自变量取值,间隔为0.025 y = np.arange(-2.0, 2.0, delta) #定义自变量取值,间隔为0.025 X, Y = np.meshgrid(x, y) #形成自变量组合矩阵
在这里我们尝试输出meshgrid的结果,为减少输出结果的数量,设置theta=1,在编辑器输入以下代码:
import matplotlib.pyplot as plt #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算
import matplotlib.cm as cm #cm即是colormap,引入该模块支持渐变颜色绘制
delta = 1 #定义常量theta=0.025
x = np.arange(-3.0, 3.0, delta) #定义自变量取值,间隔为0.025
y = np.arange(-2.0, 2.0, delta) #定义自变量取值,间隔为0.025
X, Y = np.meshgrid(x, y) #形成自变量组合矩阵
print('x=\n',x)
print('X=\n',X)
print('y=\n',y)
print('Y=\n',Y)
代码运行后的输出结果为:
x=
[-3. -2. -1. 0. 1. 2.]
X=
[[-3. -2. -1. 0. 1. 2.]
[-3. -2. -1. 0. 1. 2.]
[-3. -2. -1. 0. 1. 2.]
[-3. -2. -1. 0. 1. 2.]]
y=
[-2. -1. 0. 1.]
Y=
[[-2. -2. -2. -2. -2. -2.]
[-1. -1. -1. -1. -1. -1.]
[ 0. 0. 0. 0. 0. 0.]
[ 1. 1. 1. 1. 1. 1.]]
可见:X矩阵是一维矩阵x按照行上下叠加4次后获得的4行6列矩阵;Y矩阵是一维矩阵y先转置,再按照列左右叠加6次后获得的4行6列矩阵。
理解meshgrid:在任何一个网格点,x和y各出一个数,这种排列组合写出来就是X和Y在同一位置直接叠加,meshgrid列出了所有组合的可能。
继续解读,需要输出的自变量在此处被定义:
Z1 = np.exp(-X**2 - Y**2) #定义自变量 Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2) #定义自变量 Z = (Z1 - Z2) * 2 #定义自变量
然后定义画图和输出图形:
fig, ax = plt.subplots() #定义要画图 CS = ax.contour(X, Y, Z) #指明要画等高线图 ax.clabel(CS, inline=True, fontsize=10) #定义要输出标签 ax.set_title('Simplest default with labels') #定义图名 plt.show() #输出图形
最后的输出结果为:
图1
图1即为输出的等高线图。
【3】代码修改
【3.1】移动等高线图的位置
通过修改x和y的位置,实现移动等高线图的位置,更改后的代码和图像如下:
x = np.arange(-3.0, 3.0, delta) #定义自变量取值,间隔为0.025 y = np.arange(-2.0, 3.0, delta) #定义自变量取值,间隔为0.025
图2
更改的核心是将y的上限由2改为3。原因非常简单,因为y=2的时候图形输出不完整,因此扩大一些y即可。
按照这个思路继续修改:
x = np.arange(-2.0, 2.5, delta) #定义自变量取值,间隔为0.025 y = np.arange(-1.5, 2.5, delta) #定义自变量取值,间隔为0.025
获得图形:
图3
图像位置设定具有重要作用,需要我们在实践中不断练习以提升。
【3.2】修改数字标签的颜色
已有图中的数字标签和线条的颜色完全一致,为提高对比度,尝试自主设定数字标签的颜色。
修改ax.clabel,增加colors属性设置。改后代码和图像为:
ax.clabel(CS, colors='r',inline=True, fontsize=10) #定义要输出标签
图4
可见,数字标签的颜色已经被限定。
【3.3】修改线条的颜色
已有图中的线条的颜色是渐变的,如果我想将所有颜色设置为同一种,则在ax.contour()模块中增加colors定义即可。改后代码和图形如下:
CS = ax.contour(X, Y, Z,colors='b') #指明要画等高线图
图5
如图5所示, 所有线条的颜色已经统一,但又自动给小于0的线条调整成了虚线。
【4】总结
本文学习了等高线图的基础教程,尝试修改了等高线图的位置、数字标签的颜色和等高线的颜色。