首页 » SEO优化 » php绘制正弦图技巧_手把手教你用Matplotlib进行数据可视化

php绘制正弦图技巧_手把手教你用Matplotlib进行数据可视化

访客 2024-12-06 0

扫一扫用手机浏览

文章目录 [+]

近几年,更新、更炫酷的工具(例如,R措辞中的ggplot和ggvis)层出不穷,终极取代了Matplotlib,可是Matplotlib仍旧是一个经由良好测试的、非常主要的跨平台图形引擎。

作者:阿迪蒂亚·夏尔马(Aditya Sharma)、维什韦什·拉维·什里马利(Vishwesh Ravi Shrimali)、迈克尔·贝耶勒(Michael Beyeler)

php绘制正弦图技巧_手把手教你用Matplotlib进行数据可视化

来源:华章科技

php绘制正弦图技巧_手把手教你用Matplotlib进行数据可视化
(图片来自网络侵删)

01 导入Matplotlib

如果你安装了完全的Python Anaconda,那么你已经安装了Matplotlib,可以开始了。
否则,你可能要访问官网获取安装解释。

http://matplotlib.org

就像我们用缩写np来表示NumPy一样,我们也会用一些标准的缩写来表示Matplotlib导入:

importmatplotlibasmplimportmatplotlib.pyplotasplt

plt是我们最常用的一个接口。

02 天生一个大略的图形

言归正传,让我们创建第一个图形。

假设我们要绘制正弦函数sin(x)的一个大略线图。
我们希望函数求x轴(0≤x≤10)上的所有值。
我们将利用NumPy的linspace函数在x轴上创建一个线性空间,x值从0到10,共100个样本点:

importnumpyasnpx=np.linspace(0,10,100)

我们可以利用NumPy的sin函数求sin函数的所有x值,并通过调用plt的plot函数可视化结果:

plt.plot(x,np.sin(x))

你亲自试过了吗?发生什么了?有什么创造吗?

问题是,这取决于你在何处运行这个脚本,你可能什么都看不到。
以下是可以考虑的可能性:

1. 从.py脚本绘图

如果你正从一个脚本运行matplotlib,那么你只须要调用plt,如下所示:

plt.show()

调用后,图形就会显示出来!

2. 从IPython shell绘图

这实际上因此交互办法运行matplotlib的最便捷的办法之一。
要显示绘图,你须要在启动IPython之后,调用%matplotlib魔术命令:

%matplotlibUsingmatplotlibbackend:Qt5Agg

importmatplotlib.pyplotasplt

然后,所有图都会自动显示出来,不必每次都调用plt.show()。

3. 从Jupyter Notebook绘图

如果你从基于浏览器的Jupyter Notebook上查看这段代码,你须要利用同样的%matplotlib魔术命令。
可是,你还可以选择将图形直接嵌入notebook中,这有两种可能的结果:

%matplotlib notebook将天生的交互式图嵌入notebook中。
%matplotlib inline将天生的静态图嵌入notebook中。

我们常日会选择内联选项:

%matplotlibinline

现在,让我们再试一次:

plt.plot(x,np.sin(x))

上述命令给出的输出如图2-4所示。

▲图2-4 运用内联选项天生的图

稍后,如果你想保存图表,可以直接从IPython或Jupyter Notebook的选项中保存:

plt.savefig('figures/02.03-sine.png')

只要担保利用所支持的文件后缀即可,例如.jpg、.png、.tif、.svg、.eps或者.pdf。

在导入matplotlib之后,运行plt.style.use(style_name),你可以变动绘图的样式。
在plt.style.available中列出了所有可用的样式。
例如,试试plt.style.use('fivethirtyeight')、plt.style.use('ggplot')或者plt.style.use('seaborn-dark')。
为了增加乐趣,可以运行plt.xkcd(),再考试测验绘制其他内容。

03 可视化外部数据集的数据

作为本文的末了一个测试,让我们可视化一些来自外部数据集的数据,例如scikit-learn的digits数据集。

详细来说,我们将须要3个可视化工具:

用于实际数据的scikit-learn用于数据处理的NumPyMatplotlib

首先,让我们导入所有这些可视化工具:

importnumpyasnpfromsklearnimportdatasetsimportmatplotlib.pyplotasplt%matplotlibinline

第一步是实际加载数据:

digits=datasets.load_digits()

如果我们没有记错的话,digits该当有2个不同的字段:一个是data字段,包含实际的图像数据;另一个是target字段,包含图像标签。

与其相信我们的影象,不如让我们研究一下digits工具。
这通过输入字段名称、添加句点、再按下Tab键—digits.<TAB>来实现。
这会显示出digits工具还包含了一些其他字段,例如一个名为images的字段。
images和data这2个字段彷佛只是形状不同:

print(digits.data.shape)print(digits.images.shape)

输出结果:

(1797,64)(1797,8,8)

在这两个例子中,第一维都对应于数据集中的图像数。
但是data将所有像素排列在一个大的向量中,而images则保留了每个图像的8×8空间排列。

因此,如果我们想绘制单张图像,images字段可能更得当。
首先,利用NumPy的数组切割,从数据集中抓取一张图像:

img=digits.images[0,:,:]

这里,我们说想要抓取长为1797项的数组中的第一行,以及所有对应的8×8=64个像素。
然后,我们可以利用plt的imshow函数绘制图像:

plt.imshow(img,cmap='gray')plt.savefig('figures/02.04-digit0.png')

上述命令给出的输出如图2-5所示。
请把稳,图像是模糊的,由于我们将该图像调度到了更大的尺寸。
原始图像的大小只有8×8。

▲图2-5 天生单张图像的示例结果

此外,我们还可以利用cmap参数指定一个彩图。
在默认情形下,Matplotlib利用MATLAB的默认彩图jet。
可是,对付灰度图像,gray彩图更故意义。

末了,我们可以利用plt的subplot函数绘制一组数字样本。
subplot函数与在MATLAB中一样,我们指定行数、列数以及当前子图的索引(从1开始)。
我们将利用一个for循环遍历数据集中的前10个图像,每个图像都有自己的子图:

plt.figure(figsize=(14,4))forimage_indexinrange(10):#imagesare0-indexed,subplotsare1-indexedsubplot_index=image_index+1plt.subplot(2,5,subplot_index)plt.imshow(digits.images[image_index,:,:],cmap='gray')

天生的输出如图2-6所示。

▲图2-6 天生包含10个数字的一组子图

对付各种数据集,另一个很好的资源是本书作者迈克尔·贝耶勒的母校加州大学欧文分校的机器学习资源库:

http://archive.ics.uci.edu/ml/index.php

关于作者:阿迪蒂亚·夏尔马(Aditya Sharma),罗伯特·博世(Robert Bosch)公司的一名高等工程师,致力于办理真实天下的自动打算机视觉问题。
曾得到罗伯特·博世公司2019年人工智能编程马拉松的首名。

维什韦什·拉维·什里马利(Vishwesh Ravi Shrimali),于2018年毕业于彼拉尼博拉理工学院(BITS Pilani)机器工程专业。
此后一贯在BigVision LLC从事深度学习和打算机视觉方面的事情,还参与了官方OpenCV课程的创建。

迈克尔·贝耶勒(Michael Beyeler),是华盛顿大学神经工程和数据科学的博士后研究员,致力于仿生视觉的打算模型研究,以为盲人植入人工视网膜(仿生眼睛),改进盲人的感知体验。
他的事情属于神经科学、打算机工程、打算机视觉和机器学习的交叉领域。

本文摘编自《机器学习:利用OpenCV、Python和scikit-learn进行智能图像处理(原书第2版)》,经出版方授权发布。

延伸阅读《机器学习:利用OpenCV、Python和scikit-learn进行智能图像处理(原书第2版》

推举语:保姆级OpenCV入门实战手册——“蝴蝶书”全新升级!
通过详细的编程实践案例,先容最新OpenCV 4版本所供应的大量新特性和平台改进。
通过书中供应的用例代码,你可以快速熟习并节制机器学习领域的干系知识,节制利用OpenCV 4构建智能打算机视觉运用程序所须要的机器学习技能。

相关文章