十分钟入门Matplotlib
2018-02-01 09:45
585 查看
什么是 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()函数就会在我们的图形中添加图例。
这就相当于先标记一下,否则调用legend的时候不认识你没有标记的图线
接下来我们只需要调用函数
title(),
xlabel()和
ylabel()就可以为图形添加标题和标签。
你会得到类似于下面这张拥有标题、标签和图例的图形:
相关文章推荐
- 十分钟入门Matplotlib
- 十分钟入门Matplotlib
- 十分钟入门Matplotlib
- 十分钟入门Matplotlib
- IPython绘图和可视化---matplotlib 入门
- Matplotlib基础入门之简易折线图
- python绘图matplotlib绘图库入门
- Matplotlib绘图库入门(七):高效使用
- Python第三方库matplotlib(2D绘图库)入门与进阶
- Python图表绘制:matplotlib绘图库入门
- Python图表绘制:matplotlib绘图库入门
- matplotlib动画入门(1):基本概念
- matplotlib入门--1(条形图, 直方图, 盒须图, 饼图)
- Numpy快速入门教程(三):SciPy,Matplotlib
- Python 数据科学入门教程:Matplotlib
- matplotlib动画入门(2):第一个动画
- Matplotlib 入门(二):画图
- Python图表绘制:matplotlib绘图库入门
- Linux入门(10)——Ubuntu16.04使用pip3和pip安装numpy,scipy,matplotlib等第三方库
- 【python】matplotlib.pyplot入门