用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完全新手教程
Feb 08 Python
python文件读写操作与linux shell变量命令交互执行的方法
Jan 14 Python
详解设计模式中的工厂方法模式在Python程序中的运用
Mar 02 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
Sep 30 Python
python中for用来遍历range函数的方法
Jun 08 Python
django DRF图片路径问题的解决方法
Sep 10 Python
Python中的异常处理try/except/finally/raise用法分析
Feb 28 Python
Python assert语句的简单使用示例
Jul 28 Python
Python3并发写文件与Python对比
Nov 20 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
Feb 17 Python
python中sklearn的pipeline模块实例详解
May 21 Python
解决numpy和torch数据类型转化的问题
May 23 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+ajax无刷新上传图片实例代码
2015/11/17 PHP
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
ext 同步和异步示例代码
2009/09/18 Javascript
json 入门基础教程 推荐
2009/10/31 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
浅析node.js中close事件
2014/11/26 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
解决Mac node版本升级失败的问题
2018/05/16 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
生成无限制的微信小程序码的示例代码
2019/09/20 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
微信小程序反编译的实现
2020/12/10 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
在Python中使用全局日志时需要注意的问题
2015/05/06 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
python Pillow图像处理方法汇总
2019/10/16 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
Python如何对XML 解析
2020/06/28 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
CSS3 实现footer 固定在底部(无论页面多高始终在底部)
2019/10/15 HTML / CSS
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
岗位职责定义及内容
2013/11/08 职场文书
医院义诊活动总结
2014/07/04 职场文书
党员对照检查材料
2014/09/22 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
组织委员竞选稿
2015/11/21 职场文书
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL