技术标签: 数据科学
译者:飞龙
本节是《Python 数据科学手册》(Python Data Science Handbook)的摘录。
有时,使用等高线或颜色编码的区域,在二维中显示三维数据是有用的。有三个 Matplotlib 函数可以帮助完成这个任务:`plt.contour用于等高线图,
plt.contourf用于填充的等高线图,
plt.imshow``用于显示图像。本节介绍使用这些的几个示例。 我们首先为绘图配置笔记本,并导入我们将使用的函数:
%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-white')
import numpy as np
我们首先使用z = f(x, y)
函数演示等高线图,为f
使用以下特定选项(当我们将它用作数组广播的动机示例时,我们之前在“数组计算:广播”中看到过它们):
def f(x, y):
return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)
可以使用plt.contour
函数创建等高线图。它需要三个参数:x
值的网格,y
值的网格和z
值的网格。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 提供了各种各样的色彩表,你可以通过在plt.cm
模块上的 TAB 补全,在 IPython 中轻松浏览它们:
plt.cm.<TAB>
我们的绘图看起来更好,但线条之间的空间可能有点分散。通过使用plt.contourf()
函数(注意末尾的f
),我们可以切换到填充的等高线图来改变它,它使用与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');
但是,imshow()
有一些潜在的问题:
plt.imshow()
不接受x
和y
网格,所以你必须在绘图上手动指定图像的边界[xmin, xmax, ymin, ymax]
。plt.imshow()
默认遵循标准图像数组定义,其中原点位于左上角,而不是大多数等高线图中的左下角。 显示网格化数据时必须更改此值。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 中的三维绘图”。
文章浏览阅读1.2w次,点赞10次,收藏60次。一、引言借鉴一些流体中的重要思想, 1988年,Osher和Sethian首次提出了水平集算法[1],这是一种有效解决曲线演化问题的数值方法,并且计算稳定,适宜任意维数空间。随后,Osher等人对水平集算法做出扩展和总结[2,3], Giga也做了相关的理论扩展[4]。近年来这种算法已被广泛地应用在图像处理领域[5]中 ,尤其在图像分割中已取得了很大的进展。事实上,用水平集来解决图像分割问题的_fcxvsd
文章浏览阅读4.9k次。因为有些数据不知道具体类型,在使用var_export($data, true) 的时候,遇到:Uncaught ErrorException: var_export does not handle circular references。改用: print_r($data, true) 即可解决这个问题。..._var_export does not handle circular references
文章浏览阅读789次。能自动将文件夹中所有文件自动的识别并创建对应的文件夹,文件夹名要和文件中某个字段相同。用system()函数。如下tmp1=['mkdir ' dir_final];system(tmp1); %文件夹创建完成我试了下,用下面的函数系统就自动关机了,哈哈fun='shutdown -s';system(fun);你运行了?哈哈,别急赶紧在运行里输入shutdown -a 就取消自动关机了,不过..._natlab nkdir生成文件夹
文章浏览阅读3.6k次。在android中有一个ImageButton的View,跟Button按钮的区别是可以在Imagebutton上加载一个图片。从ImageButton这个字面意思上来看,它是一个图片按钮,那么我们就可以使用它做一个我们想要的图片按钮了,但是我们在实际使用的过程当中,就会发现该按钮的使用并没有想像中的那么简单,需要再增加一些代码或再配置XML才能实现图片按钮按下的效果,个人感觉有点麻烦,不_安卓imagebutton加入java
文章浏览阅读3.4k次。这是一个观察者模式。首先在你需要监听的类中加入观察者:- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;这个观察者在监听到anObject发送名字为aName的notification时,调用selector的方法,在aSelector方_nsnotification userinfo 什么类型
文章浏览阅读2.1k次。在android中提供了一种异步回调机制Handler,使用它,我们可以在完成一个很长时间的任务后做出相应的通知 handler基本使用: 在主线程中,使用handler很简单,new一个Handler对象实现其handleMessage方法,在handleMessage中提供收到消息后相应的处理方法即可,这里不对handler使用进行详细说明,在看本博文前,读者应_安卓bundler机制
文章浏览阅读1.5k次。上一篇文章 Cassandra入门指南 中,我们已经配置好了一个单节点集群,接下来,我们要往这个集群中多加几个节点,看看多个节点是如何同时工作的。Cassandra节点之间交换信息是通过一种叫做Gossip(暂时不知道该翻译为哪个专有名词合适,暂且意会吧)的机制。但是要想让一个消息传递到一个新加入的节点,至少还需要知道另外一个节点,这个节点叫做种子(Seed)。通常我们会选择一小部分相对稳定的节点..._cassandra_seeds
文章浏览阅读4.5k次,点赞4次,收藏14次。背景最近工作中有遇到这样一种情况,需要执行一个 exe 文件更改某些设置来触发Service 工作,而执行这个 exe 程序需要一个屏幕输入参数,这个输入参数也是需要python 脚本生成的。如果每次都是 cmd 执行这个 exe 程序,把..._python如何调用子程序
文章浏览阅读854次,点赞26次,收藏11次。本人分享一下这次字节跳动、美团、头条等大厂的面试真题涉及到的知识点,以及我个人的学习方法、学习路线等,当然也整理了一些学习文档资料出来是附赠给大家的。知识点涉及比较全面,包括但不限于前端基础,HTML,CSS,JavaScript,Vue,ES6,HTTP,浏览器,算法等等详细大厂面试题答案、学习笔记、学习视频等资料领取,点击资料领取直通车!!全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**_react使用scss
文章浏览阅读2.2k次。小程序跳转外链_外链跳转小程序
文章浏览阅读941次。微信H5页面(关闭页面&&退出网页)isWechat = () => { let ua = window.navigator.userAgent.toLowerCase(); return ua.match(/MicroMessenger/i) == 'micromessenger';};if (isWechat()) { WeixinJSBri..._weixinjsbridge.call
文章浏览阅读888次。客户端:可以看到,浏览器(客户端)向服务器发出一次请求,发出请求的时候,在请求头信息中带上了各种参数,告诉服务器,我要接收什么样的文本(Accept)、什么编码格式(Accept-Encoding)、什么语言(Accept-Language)等等,当然,还把Cookie也传到了服务器(Cookie)。服务器端:第一步:setcookie('a','value')因为cookie是设..._首次set-cookie