用matplotlib画等高线图详解


Posted in Python onDecember 14, 2017

等高线图是在地理课中讲述山峰山谷时绘制的图形,在机器学习中也会被用在绘制梯度下降算法的图形中。

因为等高线的图有三个信息:x,y以及x,y所对应的高度值。

这个高度值的计算我们用一个函数来表述:

计算x,y坐标对应的高度值
def f(x, y):
 return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2)

这个函数看起来挺复杂的,但我们这里只是为了能够获得一个高度值,因此其中函数代表什么意义不用关心,只要知道输入一个x,y,输出一个高度值就可以了。

要画出等高线,核心函数是plt.contourf(),但在这个函数中输入的参数是x,y对应的网格数据以及此网格对应的高度值,因此还需要调用np.meshgrid(x,y)把x,y值转换成网格数据才行,这样完整的代码如下:

画等高线的代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 计算x,y坐标对应的高度值
def f(x, y):
 return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2)

# 生成x,y的数据
n = 256
x = np.linspace(-3, 3, n)
y = np.linspace(-3, 3, n)

# 把x,y数据生成mesh网格状的数据,因为等高线的显示是在网格的基础上添加上高度值
X, Y = np.meshgrid(x, y)

# 填充等高线
plt.contourf(X, Y, f(X, Y))
# 显示图表
plt.show()

上述代码显示的图形为:

用matplotlib画等高线图详解

这颜色有点太冷了,我们想显示热力图,那只要在plt.contourf()函数中添加属性cmap=plt.cm.hot就能显示热力图,其中cmap代表为color map,我们把color map映射成hot(热力图),此处关键代码为:

# 填充等高线
plt.contourf(X, Y, f(X, Y), cmap=plt.cm.hot)

显示的图为:

用matplotlib画等高线图详解

是否显示得挺热的。:)

上面是用plt.contourf()填充了等高线,但还有一种方式是可以直接显示等高线,而不是填充的方式,例如:

C = plt.contour(X, Y, f(X, Y), 20)

这里20代表的是显示等高线的密集程度,数值越大,画的等高线数就越多。

这样显示的图形为:

用matplotlib画等高线图详解

当然,如果我们不调用前面的plt.contourf()函数,则就会直接显示等高线。

最后我们想在等高线中添加上标注值:

plt.clabel(C, inline=True, fontsize=12)

显示的图为:

用matplotlib画等高线图详解

完整的代码为:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 计算x,y坐标对应的高度值
def f(x, y):
 return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2)

# 生成x,y的数据
n = 256
x = np.linspace(-3, 3, n)
y = np.linspace(-3, 3, n)

# 把x,y数据生成mesh网格状的数据,因为等高线的显示是在网格的基础上添加上高度值
X, Y = np.meshgrid(x, y)

# 填充等高线
plt.contourf(X, Y, f(X, Y), 20, cmap=plt.cm.hot)
# 添加等高线
C = plt.contour(X, Y, f(X, Y), 20)
plt.clabel(C, inline=True, fontsize=12)
# 显示图表
plt.show()

总结

以上就是本文关于用matplotlib画等高线图详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
基于Python实现的扫雷游戏实例代码
Aug 01 Python
Python 读取某个目录下所有的文件实例
Jun 23 Python
python图形工具turtle绘制国际象棋棋盘
May 23 Python
python如何将多个PDF进行合并
Aug 13 Python
解决python3 requests headers参数不能有中文的问题
Aug 21 Python
opencv3/C++实现视频读取、视频写入
Dec 11 Python
python上传时包含boundary时的解决方法
Apr 08 Python
Python使用扩展库pywin32实现批量文档打印实例
Apr 09 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
May 27 Python
Python调用SMTP服务自动发送Email的实现步骤
Feb 07 Python
Python中使用Selenium环境安装的方法步骤
Feb 22 Python
Python装饰器详细介绍
Mar 25 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
Dec 14 #Python
python实现发送邮件功能代码
Dec 14 #Python
python正则实现计算器功能
Dec 14 #Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
Dec 14 #Python
python实现BackPropagation算法
Dec 14 #Python
python实现随机梯度下降(SGD)
Mar 24 #Python
Python实现将一个正整数分解质因数的方法分析
Dec 14 #Python
You might like
php中文本操作的类
2007/03/17 PHP
destoon实现商铺管理主页设置增加新菜单的方法
2014/06/26 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
js textarea自动增高并隐藏滚动条
2009/12/16 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
ie与ff下的event事件使用介绍
2013/11/25 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
js获取url传值的方法
2015/12/18 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
2016/11/18 Javascript
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
javascript写一个ajax自动拦截并下载数据代码实例
2019/09/07 Javascript
Python中操作mysql的pymysql模块详解
2016/09/13 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
pytorch 模型的train模式与eval模式实例
2020/02/20 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
机关搬迁方案
2014/05/18 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
会员卡清退活动总结
2014/08/27 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
党支部遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
小学班主任事迹材料
2014/12/17 职场文书
《秋思》教学反思
2016/02/23 职场文书
Java内存模型之happens-before概念详解
2021/06/13 Java/Android
新手入门Mysql--概念
2021/06/18 MySQL
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js