contourf参数 python_python画contour图

本文介绍了如何使用Python的matplotlib库优雅地绘制Contour图。通过实例展示了如何创建双曲线等高线图,解释了contour和contourf的区别,并详细说明了如何设置等高线条数、固定等高线值以及调整颜色等参数。
摘要由CSDN通过智能技术生成

244d14ea74285b8fce70d95af68b057a.png

如何用python优雅的画出优雅的contour图

我们选择画一个双曲线的等contour图,其实contour图就是等高线图,那么我们以圆的图为例,即:

.

在开始之前,我们需要先对matplotlib.pyplot.contour的命令熟悉一下,点击这里查看官方文档,以及这里matplotlib.pyplot.contourf的命令。

contour([X, Y,] Z, [levels], **kwargs)
contourf([X, Y,] Z, [levels], **kwargs)

这里contour画的是等高线中的线,而contourf画的是登高线之间的区域,如下图:

e18cb48ed6314605d040d37c80c24ea5.png

X,Y都是二维数组,Z是和X,Y相同维数的二维数组。

首先定义一个要画图的方程:

def f(X,Y):
    return (X**2+Y**2)

这里x,y参量是一维数组,而X,Y经过网格化后就变成了二维数组,下面我们就要对其各种参数的演示:

import numpy as np
import matplotlib.pyplot as plt
# x轴的刻度向内
plt.rcParams['xtick.direction'] = 'in' 
# y轴刻度向内
plt.rcParams['ytick.direction'] = 'in' 

# x轴和y轴的步长
stepx = 0.01; stepy = 0.01 

# x轴和y轴的变化范围
x = np.arange(-10,10,stepx); y = np.arange(-10,10,stepy) 

#对x,y网格化,得到X,Y
X,Y = np.meshgrid(x,y) 

# 定义方程
def f(X,Y):           
    return(np.sqrt(X**2+Y**2))

# 等高线
Z = f(X, Y)
fig, ax = plt.subplots(figsize=(8,8),dpi=100)
# 画contour图
CS = ax.contourf(X, Y, Z)
# 画轮廓线
CS = ax.contour(X, Y, Z)

ax.set_xlabel('$x$'); ax.set_ylabel('$y$')
#设置x,y轴刻度
plt.xticks(np.arange(-10,11,2))
plt.yticks(np.arange(-10,11,2))
# 避免图片显示不完全
plt.tight_layout()
plt.show()

演示图片:

caa3aac88917268810ddfb7b6219e17e.png

图片中的等高线是系统生成的,我们往往并不想要这样的,我们只想要两个或者三个等高线,那么可以用这个命令:

# 画contour图
CS = ax.contourf(X, Y, Z, 2)
# 画轮廓线
CS = ax.contour(X, Y, Z, 2)

演示如下:

0d2868823ccc77ba6ba8fdc70b1b83ba.png

需要说明一下, contourf(X, Y, Z, n)这里的n代表要画n+1个等高,2个也就是三个登高。

但是我们往往需要将等高线固定在某个值上,并显示出等高线的值,以及指定颜色,那么可以这样:

# 画contour图
CS = ax.contourf(X, Y, Z, [4,8],colors=['blue','lightsteelblue','white'])
# 画轮廓线
CS = ax.contour(X, Y, Z, [4,8],colors=['blue','lightsteelblue','white'])
plt.clabel(CS,fontsize=10,colors=['red','red','white'])

图片显示如下:

0d3e62028e337a761174cba21ceb3069.png

我们在这里注意一下,系统默认画的是等高线为4和等高线为8中间的一部分,有时候我们并不需要,我们需要递减,那么需要增加一个参数:

# 画contour图
CS = ax.contourf(X, Y, Z, [4,8],colors=['blue','lightsteelblue','white'],extend='both')
# 画轮廓线
CS = ax.contour(X, Y, Z, [4,8],colors=['blue','lightsteelblue','white'],extend='both')
plt.clabel(CS,fontsize=10,colors=['red','red','white'])

图片显示如下:

7eee08fca32ab2fb343a778e0bcba160.png

如有错误,欢迎指正!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值