用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使用sorted排序的方法小结
Jul 28 Python
hmac模块生成加入了密钥的消息摘要详解
Jan 11 Python
python素数筛选法浅析
Mar 19 Python
python3+PyQt5实现柱状图
Apr 24 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
Python元组常见操作示例
Feb 19 Python
python模块之subprocess模块级方法的使用
Mar 26 Python
关于python多重赋值的小问题
Apr 17 Python
Django处理多用户类型的方法介绍
May 18 Python
详解用Python实现自动化监控远程服务器
May 18 Python
Cpython解释器中的GIL全局解释器锁
Nov 09 Python
Python帮你解决手机qq微信内存占用太多问题
Feb 15 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求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
Javascript this指针
2009/07/30 Javascript
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
兼容IE和FF的js脚本代码小结(比较常用)
2010/12/06 Javascript
基于jQuery的计算文本框字数的代码
2012/06/06 Javascript
用js实现小球的自由移动代码
2013/04/22 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
原生js实现新闻列表展开/收起全文功能
2017/01/20 Javascript
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
[56:18]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python实现的登录和操作开心网脚本分享
2014/07/09 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
Python实例方法、类方法、静态方法区别详解
2020/09/05 Python
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
精通CAD能手自荐书
2014/01/31 职场文书
学生生病请假条范文
2014/02/16 职场文书
2016年感恩节寄语
2015/12/07 职场文书
暑假开始了,你的暑假学习计划写好了吗?
2019/07/04 职场文书
浅谈MySql整型索引和字符串索引失效或隐式转换问题
2021/11/20 MySQL