密度和轮廓图

有些情况下,我们需要在二维图表中使用轮廓或颜色区域来展示三维的数据(可以设想等高线地图或温度分布图)。Matplotlib 提供了三个有用的函数来处理这项任务:

plt.contour绘制轮廓图

plt.contourf来绘制填充区域颜色的图表

plt.imshow来展示图像

本节会介绍几个使用它们的例子。当然我们还是首先从将需要使用的包导入 notebook 和初始化工作开始:

%matplotlib inline

import matplotlib.pyplot as plt

plt.style.use('seaborn-white')

import numpy as np

a.三维可视化函数

我们首先使用一个简单的函数

绘制一个轮廓图来进行说明,我们用来作为数组广播运算的例子:

def f(x, y):

return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)

轮廓图可以使用plt.contour函数进行创建。它接收三个参数:

x参数代表三维网格的平面横轴坐标

y参数代表三维网格的平面纵轴坐标

z参数代表三维网格的高度坐标

最容易用来准备这种网格数据的是np.meshgrid函数,可以将两个一维的数组构造成一个二维的网格:

x = np.linspace(0, 5, 50)

y = np.linspace(0, 5, 40)

X, Y = np.meshgrid(x, y)

Z = f(X, Y)

下面我们可以绘制标准的轮廓线图表:

plt.contour(X, Y, Z, colors='black');

图中值得注意的是,当使用单色绘制轮廓图时,虚线代表的是负数的数值,而实线代表的是正数。而轮廓线可以通过指定cmap参数来设置线条的色图。下例中展示了使用色图且绘制了更多的轮廓线的例子,会在整个数据范围区域内等距分布有 20 条轮廓线:

plt.contour(X, Y, Z, 20, cmap='RdGy');

上例中我们选择了RdGy(Red-Gray的缩写)色图,这对于聚集的数据来说是一个不错的选择。Matplotlib 有大量的颜色图可供使用,你可以通过在 IPython 中对plt.cm模块使用 TAB 自动补全方法就可以看到:

plt.cm.

上面的图看起来比第一幅图好多了,但是线条之间的空隙还是有点让人混淆。我们可以将上面的图改为填充轮廓图来解决这个问题,使用plt.contourf()函数(注意函数名最后有个 f,代表填充 fill),这个函数的语法基本上与plt.contour()保持一致。

并且我们加上了plt.colorbar()函数,这个函数会在图表边上创建一个颜色图例用以展示颜色所表示的数值区域:

plt.contourf(X, Y, Z, 20, cmap='RdGy')

plt.colorbar();

有了图例,很容易可以看出黑色区域代表着“峰”,而红色区域代表这“谷”。

上图有一个缺点,那就是图中颜色的阶梯是离散的而不是连续的,这通常不是我们想要的。我们可以通过设置很高的轮廓线数量来改善,但是这会导致绘制图表的性能降低:Matplotlib 必须在每个颜色阶梯上绘制一条新的轮廓多边形。更好的办法是使用plt.imshow()函数,它会将一个二维的网格图表转换为一张图像。

下面的例子展示了该方法:

plt.imshow(Z, extent=[0, 5, 0, 5], origin='lower',

cmap='RdGy')

plt.colorbar()

plt.axis(aspect='image');

b.在使用imshow()的时候也有一些坑:

plt.imshow()不接受 x 和 y 网格值作为参数,因此你需要手动指定extent参数[xmin, xmax,ymin,ymax]来设置图表的数据范围。

plt.imshow()使用的是默认的图像坐标,即左上角坐标点是原点,而不是通常图表的左下角坐标点。这可以通过设置origin参数来设置。

plt.imshow()会自动根据输入数据调整坐标轴的比例;这可以通过参数来设置,例如,plt.axis(aspect=‘image’)能让 x 和 y 轴的单位一致。

最后,有时可能需要将轮廓图和图像结合起来。例如,下例中我们使用了半透明的背景图像(通过alpha参数设置透明度),然后在背景图层之上绘制了轮廓图,并带有每个轮廓的数值标签(使用plt.clabel()函数绘制标签):

contours = plt.contour(X, Y, Z, 3, colors='black')

plt.clabel(contours, inline=True, fontsize=8)

plt.imshow(Z, extent=[0, 5, 0, 5], origin='lower',

cmap='RdGy', alpha=0.5)

plt.colorbar();

通过组合使用plt.contour、plt.contourf和plt.imshow这三个函数,基本可以满足我们绘制所有这种在二维图标上的三维数据的需求。需要了解更多函数的参数信息,参考它们的文档字符串。如果你对于使用三维图表展示这种数据感兴趣,参见[在 matplotlib 中创建三维图表]。

python 三维数据绘制等高线_python密度与等高线绘制,Python,和,轮廓图,Matplotlib,详解...相关推荐

  1. python 三维散点图拟合曲面_python 绘图---2D、3D散点图、折线图、曲面图

    python中绘制2D曲线图需要使用到Matplotlib,Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形,通过 Matplo ...

  2. python调用adb shell命令_Python之使用adb shell命令启动应用的方法详解

    Python之使用adb shell命令启动应用的方法详解 一直有一个心愿希望可以用Python做安卓自动化功能测试,在一步步摸索中,之前是用monkeyrunner,但是发现对于控件ID的使用非常具 ...

  3. python元组读取到列表_python中读入二维csv格式的表格方法详解(以元组/列表形式表示)...

    如何去读取一个没有表头的二维csv文件(如下图所示)? 并以元组的形式表现数据: ((1.0, 0.0, 3.0, 180.0), (2.0, 0.0, 2.0, 180.0), (3.0, 0.0, ...

  4. python网上批量下载表格_python爬虫智能翻页批量下载文件的实例详解

    python爬虫遇到爬取文件内容时,需要一页页的翻页爬取,这样很是麻烦,其实可以获取每个列表信息下的文件名和文件链接,让文件名和文件链接处理为列表,保存后下载,实现智能翻页批量下载文件,本文以以京客隆 ...

  5. python鸭制作类代码_Python实现多态、协议和鸭子类型的代码详解

    多态 问起面向对象的三大特性,几乎每个人都能对答如流:封装.继承.多态.今天我们就要来说一说 Python 中的多态. 所谓多态:就是指一个类实例的相同方法在不同情形有不同表现形式.多态机制使具有不同 ...

  6. python逢7跳过_python实现逢七拍腿小游戏的思路详解

    逢七拍腿游戏 几个小朋友在一起玩逢七拍腿的游戏,从1开始数数,当数到7的倍数或者尾号是7时,拍一下腿.现在从1数到99,假设每个人都没有错,计算一下共要拍腿几次? 第一种实现思路:通过在for循环语句 ...

  7. python拍七游戏代码_python实现逢七拍腿小游戏的思路详解

    逢七拍腿游戏 几个小朋友在一起玩逢七拍腿的游戏,从1开始数数,当数到7的倍数或者尾号是7时,拍一下腿.现在从1数到99,假设每个人都没有错,计算一下共要拍腿几次? 第一种实现思路:通过在for循环语句 ...

  8. python批量合并单元格_Python批量合并有合并单元格的Excel文件详解

    合并单元格 合并单元格相信大家都会,比如下面这段简单的代码就可以实现: app='Word' word=win32.gencache.EnsureDispatch('%s.Application' % ...

  9. python打印一个对象的所有属性_python打印出所有的对象/模块的属性代码详解

    python 打印出所有的对象/模块的属性(实例代码) 实例如下: import sys def print_all(module_): modulelist = dir(module_) lengt ...

最新文章

  1. python入门作业编程题-【python基础语法】第10天作业练习题
  2. Toolbar-5.0新特性
  3. python从云端数据库获取数据失败_使用%s的Python MySQL Connector数据库查询失败
  4. keyshot渲染玻璃打光_KeyShot新手的第一次打光,无脑三点打光塑造模型质感
  5. Linux下基本TCP socket编程之客户端
  6. T1119 紧急措施(逐句精解)
  7. ceph管理界面calamari(未成功)
  8. wince 之临时宏控制 bib 和 reg
  9. 不情愿的守门人:关于全栈开发者的迷思
  10. 爬虫爬取豆瓣电影排行,保存到excel和SQLite
  11. map和filter方法对于稀缺数组的处理
  12. Wireshark抓包实例诊断TCP连接问题
  13. icinga用NSCA监控远程Linux服务器
  14. 示波器怎么当做记录仪用​
  15. Xilinx vivado 常用IP核使用
  16. php开发人工智能,php可以开发人工智能吗
  17. 官方盘点 .NET 7 新功能
  18. Linux命令操作——常用解压缩命令
  19. Linux常用操作和命令
  20. 3D MAX 入门教程内容结构

热门文章

  1. 软件测试工程师必备干货,移动应用测试【建议收藏】
  2. 【踩坑日记】阿里云内容安全
  3. 抖音上热门精选的要求 视频怎么修改md5
  4. peewee mysql_peewee基本使用
  5. 【工程理论】引线键合机介绍
  6. sql2008数据导入与导出
  7. link library 、target library、symbol library、synthetic library对照分析-基础小知识(九)
  8. 服务器pcie 3.0装固态硬盘,PCIe SSD怎么装系统?实操发现竟然这么简单!
  9. 小米 oj 22 题 找到第 N 个数字
  10. Python获取拥有100万+关注的CSDN公众数据, 发现最关心的竟不是技术,而是…