网络编程
位置:首页>> 网络编程>> Python编程>> python作图基础之plt.contour实例详解

python作图基础之plt.contour实例详解

作者:你大佬来啦  发布时间:2023-04-05 01:05:44 

标签:python,作图,plt.contour

前言

plt.contour是python中用于画等高线的函数,这里介绍一下plt.contour的使用。

使用示例

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3, 3, 50)  # 生成连续数据
y = np.linspace(-3, 3, 50)  # 生成连续数据
X, Y = np.meshgrid(x, y)    
# 生成能够在坐标系中形成点阵的数组,这个可以去参考一下别的文章
# https://lixiaoqian.blog.csdn.net/article/details/81532855 这里讲的比较详细
Z = X**2 + Y**2     # 这里将高度设置为x^2+y^2,就能画一个圆形的等高线
C=plt.contour(x, y,Z,[2,5,8,10])  # 画等高线 # 使用plt.contour(X, Y,Z,[2,5,8,10])也是没问题的
plt.clabel(C, inline=True, fontsize=10)

画出来的效果就是:

python作图基础之plt.contour实例详解

plt.contour()函数本身

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

  • plt就是matplotlib.pyplot

  • X, Y表示的是坐标位置(这里是可选的,但是如果不传入的话就是python根据传入的高度数组(Z)的大小自动生成的坐标),一般很多会使用二维数组,但是实际上一维数组也可以的

  • Z代表每个坐标对应的高度值,是一个二维数组,其中每个值表示的是每个坐标对应的高度 XYZ的实际数据构成可以参照上面的例子,在本地查看一下数据是长什么样

  • levels有两种传入形式。一种是传入一个整数,这个整数表示你想绘制的等高线的条数,但是显示结果可能并不是完全和传入的整数的条数一样,是大致差不多的条数(可能相差一两条)(为什么是大致条数呢?可能是python帮你默认生成的比较合适的几条等高线吧)。还有一种方式就是传入一个包含高度值的一维数组,这样python便会画出传入的高度值对应的等高线。

  • 其余的参数cmap, linewidths, linestyles等这里就不多介绍了

plt.contour()图中的坐标

由于一开始这里很混淆,因此在这里对坐标代表的内容进行一个解释。要解释这个问题,首先可以引入实际问题,比如一座山,一般来说从飞机上或者很高的地方观察这座山的话能看到这座山就像圆一样,如果抽象成平面的话就成为一个圆了(这里是指比较规整的山啊)。然后实际上等高线就是从这样很高的地方去想象的,通过一系列工具把相同高度的位置在一个平面上标注出来,相同高度的位置通过线连起来就形成了等高线。

如果把刚刚说的圆放在坐标系中,那么某个坐标(x,y)就表示观察到的这座山在平面视角来看所展现出来的位置,如下图:

python作图基础之plt.contour实例详解

左边假设是一座山,上面的红色的点在平面视角来看的话就成为坐标系中的一个位置,此时高度已经在等高线图中反映不出来了,这也是为什么等高线的图需要标注高度值。

这里结合三维图来看会更加直观:将上面的圆形的等高线图的高度用三维图像展示出来,使用代码为:

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

x = np.linspace(-3, 3, 50)
y = np.linspace(-3, 3, 50)
X, Y = np.meshgrid(x, y)
Z = X**2 + Y**2
C=plt.contour(x, y,Z,[2,5,8,10])
plt.clabel(C, inline=True, fontsize=10)

fig=plt.figure()
fig = plt.figure(figsize=(10,10))
ax1 = plt.axes(projection='3d')

ax1.scatter3D(X,Y,z, cmap='Blues')

效果如下:

python作图基础之plt.contour实例详解

图中X,Y,Z都分别被转换为了三维坐标系中的坐标,形成了一个类似球形的一个部分的高度图。Z轴就是每个点对应的高度值,这里试想如果把整张图从最顶部投下到xy二维坐标系中,如果取开始的某几个固定的高度值(如2,5,8),那么这几个固定的高度值所对应的坐标在二维坐标系中连起来的话就成为了一条等高线。

这里可以多看几个例子:

x = np.linspace(-3, 3, 50)
y = np.linspace(-3, 3, 50)
X, Y = np.meshgrid(x, y)
z = (np.exp(-X**2 - Y**2) - np.exp(-(X - 1)**2 - (Y - 1)**2))*2

fig=plt.figure()
fig = plt.figure(figsize=(10,10))
ax1 = plt.axes(projection='3d')
ax1.scatter3D(X,Y,z, cmap='Blues')

效果:

python作图基础之plt.contour实例详解

其二维图为:

python作图基础之plt.contour实例详解

叮!

不学不知道,学了才知道什么都不是想象的那么简单啊。

补充:plt.contour等高线绘制

import numpy as np
import matplotlib.pyplot as plt

def height(x, y):
   return (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)

x = np.linspace(-3, 3, 300)
y = np.linspace(-3, 3, 300)
X, Y = np.meshgrid(x, y)
# 为等高线填充颜色 10表示按照高度分成10层
plt.contourf(X, Y, height(X, Y), 10, alpha=0.75, cmap=plt.cm.hot)
C = plt.contour(X, Y, height(X, Y), 10, colors='black')
# 绘制等高线标签
plt.clabel(C, inline=True, fontsize=10)
# 去掉坐标轴刻度
# plt.xticks(())
# plt.yticks(())
plt.show()
# 显示图片

python作图基础之plt.contour实例详解

参考:https://blog.csdn.net/qq_42505705/article/details/88771942

来源:https://blog.csdn.net/keepaware/article/details/121717046

0
投稿

猜你喜欢

  • 在工控应用上,返回的数据经常会以二进制的形成存储,而这些二进制数据又是以每4个bit表示一个十六进制的数据内容。解析的时候,往往是一个字节(
  • getattr函数(1)使用 getattr 函数,可以得到一个直到运行时才知道名称的函数的引用。>>> li = [&q
  • 这年头,信息和获得信息的渠道越来越多。随着信息量的增大,先有了分类,又有了导航,再有了搜索,后面的发展还不得而知。在此只是根据平日的所看所想
  •  读取nc数据相关信息#导入库import netCDF4from netCDF4 import Dataset#读取数据文件nc
  • 看到sam关于max-height的文章,觉得按捺不住了。sam注重于样式表的写法,过多的要求div+css的布局,sam可是追求艺术的人哦
  • A.课程内容本节课主要学习函数的返回值returm,通过学习编写一个汇率转换器程序。B.知识点(1)定义函数(2)调用函数(3)返回值C.用
  • PHP join() 函数实例把数组元素组合为一个字符串:<?php $arr = array('Hello',
  • 小白尝试写任意文件读取poc我是一个小白,完全不懂Python,但是Python在渗透中往往是一个重要的角色。有一个CSDN百万大佬写了这样
  • 首先要解释一下:“极致之美”不是说月儿的这篇文章,因为本人还没有自大到这种程度:P,它形容的是Lisp和javascript结合的优美形态。
  • 如何制作一个弹出式的调查窗口?执行下面这段ASP代码:    <%  &n
  • 北京时间2月15日据国外媒体报道,美国知名sns网站Facebook全球活跃用户量已突破1.75亿大关。数据显示,全球20%的网民都使用Fa
  • 下表列出了 Microsoft ACCESS 的命令行选项:选项 效果database 打开指定的 Microsoft Access 数据库
  • 如何定义记录集打开的游标类型和锁定类型?我们知道,打开记录集时,可以定义记录集打开的游标类型和锁定类型。在adovbs.inc文件中就定义了
  • 如何让我的网页自动适应客户端的屏幕分辨率?然后用下列办法进行自动推送:<% @language="vbscript
  • 1、修改MD5算法重的4个常数,这是最捷径的作法,其特点是加密后的数据和加密前非常类似,但是不会被破解 2、多次加密,对MD5加密过的数据进
  • 依次前移,实现聊友们的发言的更迭:function form1_onsubmit()if document.form1.
  • 1. 吊顶下拉菜单的键盘可用性改进无障碍访问貌似最近比较火,大家都在聊,其中一块就是键盘的可访问性。我们在首页上作了些调整,让用户可以通过键
  • 第一次写技术博客,有不尽如人意的地方,还请见谅和指正。为什么想整理这方面的类容,我觉得就像油画家要了解他的颜料和画布、雕塑家要了解他的石材一
  • XML的未来 现在你已经知道XML。确实,结构有点复杂,而且DTD有各种可以定义文档可以包含的内容的选项。但还不只这些。考虑一个数据交换对其
  • 初学初用,随手记录以当作笔记使用,会慢慢再进行补充添加,错误之处烦请指正。(1)运行本地文件,在代码不加载的情况下可以直接显示结果% run
手机版 网络编程 asp之家 www.aspxhome.com