密度和轮廓图

有些情况下,我们需要在二维图表中使用轮廓或颜色区域来展示三维的数据(可以设想等高线地图或温度分布图)。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.<TAB>

上面的图看起来比第一幅图好多了,但是线条之间的空隙还是有点让人混淆。我们可以将上面的图改为填充轮廓图来解决这个问题,使用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密度和轮廓图绘制--Matplotlib详解相关推荐

  1. python:七段数码管绘制数字详解

    python:七段数码管绘制数字详解 七段数码管由七段数码管拼接而成,每段有亮或不亮两种情况.这里,先给出程序的全部代码,如下所示. 定义了drawDigit()函数,该函数根据输入的数字绘制七段数码 ...

  2. 多级雷达图绘制python_Python 详解雷达图/蛛网图

    雷达图-pyecharts 蛛网图,最早知道是在玩FIFA游戏的时候,球员的能力用蛛网图来表示与比较,那时觉得非常新鲜.后来,在实际的工作中,其实很少用到:一方面,直接提供蛛网图的工具少:另一方面,过 ...

  3. 正确的鱼骨图绘制方法详解

    鱼骨图的特点是简便直观,利用鱼骨的形状将问题/结果标注在"鱼头"上,再将原因/结构关系等分支罗列在"鱼刺"上. 目前主要的鱼骨图类型有3种: A 结构型 B 原 ...

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

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

  5. python画散点图程序-Python散点图与折线图绘制过程解析

    这篇文章主要介绍了Python散点图与折线图绘制过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在数据分析的过程中,经常需要将数据可视化,目 ...

  6. python画椭圆-python opencv圆、椭圆与任意多边形的绘制实例详解

    圆形的绘制 : OpenCV中使用circle(img,center,radius,color,thickness=None,lineType=None,shift=None)函数来绘制圆形 impo ...

  7. 请问怎么用python画一个轮廓图,,例如中国地图这种,注意是轮廓图,求大佬指点

    请问怎么用python画一个轮廓图,,例如中国地图这种,注意是轮廓图 例如这个:

  8. python中文编码-python中文编码与json中文输出问题详解

    前言 python2.x版本的字符编码有时让人很头疼,遇到问题,网上方法可以解决错误,但对原理还是一知半解,本文主要介绍 python 中字符串处理的原理,附带解决 json 文件输出时,显示中文而非 ...

  9. python 3.x 爬虫基础---http headers详解

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---Requer ...

最新文章

  1. 安装sql 2005 闪退 连接到服务器失败。错误:0x80070424
  2. 4.1.1 网络层功能概述
  3. Spring Cloud Alibaba - 12 使用Nacos的元数据实现金丝雀发布功能
  4. arcgis api for javascipt 加载天地图、百度地图
  5. CrtInvertedIdx
  6. [css] 怎样用纯CSS实现禁止鼠标点击事件?
  7. 【小技巧】【牛客网】【JAVA】在线输入输出练习
  8. 十二、流程控制之条件运算符
  9. schema自动生成前端代码
  10. 探究本质,WebGIS前端地图显示之地图比例尺换算原理
  11. 24、Scratch教程-图章工具
  12. Nginx专题:nginx+tomcat实现动静分离
  13. iframe 重新加载
  14. lua调试的工具选择
  15. 智能三子棋——保姆级教学。
  16. devstack only neutron keyston
  17. 一个拼图软件项目Demo
  18. php中{ifp}{ife}{ifpp}是什么意思、作用
  19. 基于unity制作的AR视频播放
  20. Python爬虫练习 爬取网络小说保存到txt

热门文章

  1. 带你走进T-Pot多蜜罐平台革命:简述、安装、使用、优化、更新
  2. 添加一个pv到vg后,误删新加入的pv,报 pv * not found or rejected by a filter
  3. C++/Python中两个小于号或两个大于号的作用
  4. 二维码条形码生成打印软件C#源码,根据变量自动添加抬头
  5. 真人口播视频号:流量不愁,变现才是重中之重丨国仁网络
  6. 转置卷积和膨胀卷积详细讲解
  7. Peewee 使用手册
  8. n*n蛇形方阵的输出
  9. 前台、后台、前端、后端的区分
  10. 庸科科沾稚尘悦蕉谷捉