编程派微信号:codingpyweb
看完此文若是以为不错,不妨点击文末广告支持一下编程
昨天推出的免费赠书活动还在进行,首先感谢你们的积极参与!看了眼前五的朋友,比刚开始时的变化仍是挺大的啊,昨天没看到的朋友不要错过了哦。传送门 --》 福利 | 推荐一本美亚排名第一的Python入门教材。数组
回到今天这篇文章,主题是 Python 库中大名鼎鼎的绘图图 Matplotlib 。当初我也是受了这个库的吸引,开始学习 Python 的。给你们看几张用 Matplotlib 生成的图:(首图也是用 Matplotlib 绘制的)微信
本文的原做者是 Jamal Moir,是 Python 科学计算系列的第一篇文章,或许有人已经翻译过了,但我以为咱们 Python 翻译组的译文质量仍是不错的。但愿对喜欢 Python 的各位朋友有帮助。dom
本文译者 linkmyth,校对 EarlGrey@编程派。linkmyth 是同济大学的在读硕士,主攻web开发、机器学习等方向。机器学习
如下是原文正文:ide
数据的处理、分析和可视化已经成为 Python 近年来最重要的应用之一。这种现象又进一步引出“大数据”分析等相似的话题,而大数据分析在人们所能预见的诸多领域内都有普遍应用,这其中就包含笔者我的感兴趣的机器学习。
Python 在处理数据、分析数据以及数据可视化方面拥有不少功能强大的工具,这也是 Python 在科学领域中可以迅速发展的一个主要缘由。函数
在接下来的一系列文章中,咱们将介绍 Python 科学计算中涉及的主要的库,而且学习如何使用它们处理数据以知足咱们的需求。可是咱们并不是只是停留在快速写出模板代码来使用这些库的层面上,咱们还会了解这些库背后的数学知识,以帮助咱们更好地理解库的运行原理。工具
首先,咱们将从一个功能很是强大的库 Matplotlib 开始介绍,在后面的文章中也会一直用到这个库。学习
什么是 Matplotlib?
简单来讲,Matplotlib 是 Python 的一个绘图库。它包含了大量的工具,你可使用这些工具建立各类图形,包括简单的散点图,正弦曲线,甚至是三维图形。Python 科学计算社区常用它完成数据可视化的工做。
你能够在他们的网站上了解到更多 Matplotlib 背后的设计思想,可是我强烈建议你先浏览一下他们的图库,体会一下这个库的各类神奇功能。
画一个简单的图形
首先咱们要画一条在 [0, 2pi] 上的正弦曲线。读者应该会注意到咱们在这里使用了 Numpy 库,可是即使你没有使用过这个库也不用担忧,在后面的文章中咱们也会介绍到 Numpy 库。
import matplotlib.pyplot as plt import numpy as np
以上这些就是咱们将要用到的导入模块。在个人上一篇文章(以及另外一篇文章)中都提到过 from x import * 是一种糟糕的导入方式。咱们不想在程序里重复书写 matplotlib.pyplot 和 numpy,这种书写方式过于冗长,所以咱们采用了上面的折中写法。
# 简单的绘图 x = np.linspace(0, 2 * np.pi, 50) plt.plot(x, np.sin(x)) # 若是没有第一个参数 x,图形的 x 坐标默认为数组的索引 plt.show() # 显示图形
上面的代码将画出一个简单的正弦曲线。np.linspace(0, 2 * np.pi, 50) 这段代码将会生成一个包含 50 个元素的数组,这 50 个元素均匀的分布在 [0, 2pi] 的区间上。
plot 命令以一种简洁优雅的方式建立了图形。提醒一下,若是没有第一个参数 x,图形的 x 轴坐标将再也不是 0 到 2pi,而应该是数组的索引范围。
最后一行代码 `plt.show() 将图形显示出来,若是没有这行代码图像就不会显示。
运行代码后应该会相似获得下面的图形:
在一张图上绘制两个数据集
大多数时候读者可能更想在一张图上绘制多个数据集。用 Matplotlib 也能够轻松实现这一点。
x = np.linspace(0, 2 * np.pi, 50) plt.plot(x, np.sin(x), x, np.sin(2 * x)) plt.show()
上面的代码同时绘制了表示函数 sin(x) 和 sin(2x) 的图形。这段代码和前面绘制一个数据集的代码几乎彻底相同,只有一点例外,这段代码在调用 plt.plot() 的时候多传入了一个数据集,并用逗号与第一个数据集分隔开。
最后你会获得相似于下面包含两条曲线的图形:
自定义图形的外观
当在同一个图形上展现多个数据集时,经过改变线条的外观来区分不一样的数据集变得很是必要。
# 自定义曲线的外观 x = np.linspace(0, 2 * np.pi, 50) plt.plot(x, np.sin(x), 'r-o', x, np.cos(x), 'g--') plt.show()
上述代码展现了两种不一样的曲线样式:'r-o' 和 'g--'。字母 ‘r’ 和 ‘g’ 表明线条的颜色,后面的符号表明线和点标记的类型。例如 '-o' 表明包含实心点标记的实线,'--' 表明虚线。其余的参数须要读者本身去尝试,这也是学习 Matplotlib 最好的方式。
颜色:
蓝色 - ‘b’
绿色 - ‘g’
红色 - ‘r’
青色 - ‘c’
品红 - ‘m’
黄色 - ‘y’
黑色 - ‘k’(’b’表明蓝色,因此这里用黑色的最后一个字母)
白色 - ‘w’线:
直线 - ‘-‘
虚线 - ‘—‘
点线 - ‘:’
点划线 - ‘-.’经常使用点标记
点 - ‘.’
像素 - ‘,’
圆 - ‘o’
方形 - ‘s’
三角形 - ‘^’
更多点标记样式点击这里
最后你会获得相似下面的图形:
使用子图
使用子图能够在一个窗口绘制多张图。
# 使用子图 x = np.linspace(0, 2 * np.pi, 50) plt.subplot(2, 1, 1) # (行,列,活跃区) plt.plot(x, np.sin(x), 'r') plt.subplot(2, 1, 2) plt.plot(x, np.cos(x), 'g') plt.show()
使用子图只须要一个额外的步骤,就能够像前面的例子同样绘制数据集。即在调用 plot() 函数以前须要先调用 subplot() 函数。该函数的第一个参数表明子图的总行数,第二个参数表明子图的总列数,第三个参数表明活跃区域。
活跃区域表明当前子图所在绘图区域,绘图区域是按从左至右,从上至下的顺序编号。例如在 4×4 的方格上,活跃区域 6 在方格上的坐标为 (2, 2)。
最终你会获得相似下面的图形:
简单的散点图
散点图是一堆离散点的集合。用 Matplotlib 画散点图也一样很是简单。
# 简单的散点图 x = np.linspace(0, 2 * np.pi, 50) y = np.sin(x) plt.scatter(x,y) plt.show()
正如上面代码所示,你只须要调用 scatter() 函数并传入两个分别表明 x 坐标和 y 坐标的数组。注意,咱们经过 plot 命令并将线的样式设置为 'bo' 也能够实现一样的效果。
最后你会获得相似下面的无线图形:
彩色映射散点图
另外一种你可能用到的图形是彩色映射散点图。这里咱们会根据数据的大小给每一个点赋予不一样的颜色和大小,并在图中添加一个颜色栏。
# 彩色映射散点图 x = np.random.rand(1000) y = np.random.rand(1000) size = np.random.rand(1000) * 50 colour = np.random.rand(1000) plt.scatter(x, y, size, colour) plt.colorbar() plt.show()
上面的代码大量的用到了 np.random.rand(1000),缘由是咱们绘图的数据都是随机产生的。
同前面同样咱们用到了 scatter() 函数,可是此次咱们传入了另外的两个参数,分别为所绘点的大小和颜色。经过这种方式使得图上点的大小和颜色根据数据的大小产生变化。
而后咱们用 colorbar() 函数添加了一个颜色栏。
最后你会获得相似于下面的彩色散点图:
直方图
直方图是另外一种常见的图形,也能够经过几行代码建立出来。
# 直方图 x = np.random.randn(1000) plt.hist(x, 50) plt.show()
直方图是 Matplotlib 中最简单的图形之一。你只须要给 hist() 函数传入一个包含数据的数组。第二个参数表明数据容器的个数。数据容器表明不一样的值的间隔,并用来包含咱们的数据。数据容器越多,图形上的数据条就越多。
最终你会获得相似下面的直方图:
标题,标签和图例
当须要快速建立图形时,你可能不须要为图形添加标签。可是当构建须要展现的图形时,你就须要添加标题,标签和图例。
# 添加标题,坐标轴标记和图例 x = np.linspace(0, 2 * np.pi, 50) plt.plot(x, np.sin(x), 'r-x', label='Sin(x)') plt.plot(x, np.cos(x), 'g-^', label='Cos(x)') plt.legend() # 展现图例 plt.xlabel('Rads') # 给 x 轴添加标签 plt.ylabel('Amplitude') # 给 y 轴添加标签 plt.title('Sin and Cos Waves') # 添加图形标题 plt.show()
为了给图形添加图例,咱们须要在 plot() 函数中添加命名参数 'label' 并赋予该参数相应的标签。而后调用 legend() 函数就会在咱们的图形中添加图例。
接下来咱们只须要调用函数 title(),xlabel() 和 ylabel() 就能够为图形添加标题和标签。
你会获得相似于下面这张拥有标题、标签和图例的图形:
以上内容应该足够帮助读者开始使用 Matplotlib 和 Python 实现数据可视化,可是这些内容并不全面。我强烈建议读者亲自尝试使用这个工具,笔者也是经过这种方式掌握了这个工具。画一些图形,改变样式并使用子图功能,而后你就会很快掌握 Matplotlib 的使用方式。
这是一篇是关于如何使用 Matplotlib 和 Python 完成数据可视化的文章,也是 Python 科学计算系列文章中的第一篇。我但愿读者能从中有所收获,而且对 Matplotlib 库更加熟悉。