python画图|等高线图contour基本教程

随着学习的深入,对绘制等高线图的需求逐渐显现。

为此,大家一起学习一下等高线图的基本绘制教程。

【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】总结

本文学习了等高线图的基础教程,尝试修改了等高线图的位置、数字标签的颜色和等高线的颜色。

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值