matplotlib作为数据可视化的强大工具,使我们必不可少需要掌握的知识点。
1、一些必要技巧
1.1 导入:
import matplotlib as mpl
import matplotlib.pyplot as plt
plt 是最常用的接口,在本章后面的内容中会经常用到。
1.2设置绘图风格
plt.style.use(‘classic’)
1.3 显示图形
plt.show()
2、画简易线形图
在所有图形中,最简单的应该就是线性方程 y = f (x) 的可视化了。
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
#创建一个图形fig和坐标轴ax
fig = plt.figure()
ax = plt.axes()#默认是横纵坐标轴长度都是1.0,单位长度0.2
在 Matplotlib 里面,figure(plt.Figure 类的一个实例)可以被看成是 一个能够容纳各种坐标轴、图形、文字和标签的容器。就像你在图中看 到的那样,axes(plt.Axes 类的一个实例)是一个带有刻度和标签的 矩形,最终会包含所有可视化的图形元素。
创建好坐标轴之后,就可以用 ax.plot 画图了
x = np.linspace(0, 10, 1000)
ax.plot(x, np.sin(x))
上面这是matlab风格的,下面介绍面向对象的:
plt.plot(x, np.cos(x))
plt.plot(x, np.sin(x))
用plt来实现,可以在一个坐标轴上画很多图形,很多情况下ax,plt可以互换的。
2.2、调整现调颜色与风格
plt.plot() 函 数可以通过相应的参数设置颜色与风格。要修改颜色,就可以使用 color 参数,它支持各种颜色值的字符串
例如:plt.plot(x, np.sin(x), color=‘red’)
linestyle='solid’参数可以设置线条样式,这个是实线。
调整坐标轴上下限基础版:
plt.plot(x, np.sin(x)) plt.xlim(-1, 11) plt.ylim(-1.5, 1.5);
更高级的是plt.axis() ,它还可以按照图形的内容自动收紧坐标轴,不留空白区域:
plt.plot(x, np.sin(x))
plt.axis(‘tight’)#参数可以自己设置,其他参数大家自己查阅
2.3、设置图形标签(图形标题、坐标轴 标题、简易图例)
plt.plot(x, np.sin(x))
plt.title(“A Sine Curve”)
plt.xlabel(“x”)
plt.ylabel(“sin(x)”);
当很多线条画在同一个图上,我们需要图例来区分plt.legend:
你会发现,plt.legend() 函数会将每条线的标签与其风格、颜色自动 匹配。关于通过 plt.legend() 设置图例的更多信息,请参考相应的程 序文档。
plt.plot(x, np.sin(x), ‘-g’, label=‘sin(x)’)
plt.plot(x, np.cos(x), ‘:b’, label=‘cos(x)’)
plt.legend()
3、简易散点图
可以用plt.plot画:
x = np.linspace(0, 10, 30)#30代表有30个点
y = np.sin(x)
plt.plot(x, y, ‘o’, color=‘black’);
当然我们更常用的是scatter函数:
x = np.linspace(0, 10, 30)#30代表有30个点
y = np.sin(x)
plt.scatter(x, y, marker=‘o’)
plt.scatter 与 plt.plot 的主要差别在于,前者在创建散点图时具有 更高的灵活性,可以单独控制每个散点与数据匹配,也可以让每个散点 具有不同的属性(大小、表面颜色、边框颜色等)
下面来创建一个随机散点图,里面有各种颜色和大小的散点。为了能更 好地显示重叠部分,用 alpha 参数来调整透明度
rng = np.random.RandomState(0)
x = rng.randn(100)
y = rng.randn(100)
colors = rng.rand(100)
sizes = 1000 * rng.rand(100)
plt.scatter(x, y, c=colors, s=sizes, alpha=0.3,cmap='viridis')
plt.colorbar(); # 显示颜色条
看一个实际的例子,例如,可以用 Scikit-Learn 程序库里面的鸢尾花(iris)数据来演示。它 里面有三种鸢尾花,每个样本是一种花,其花瓣(petal)与花萼,散点图可以让我们同时看到不同维度的数据:每个点的坐标值 (x, y) 分 别表示花萼的长度和宽度,而点的大小表示花瓣的宽度,三种颜色对应 三种不同类型的鸢尾花。这类多颜色与多特征的散点图在探索与演示数据时非常有用。我第一次实现下面这个可视化时感觉非常神奇。
虽然scatter非常强大,但是也有缺点。plt.plot 与 plt.scatter 除了特征上的差异之外,还有什么影响我们 选择的因素呢?在数据量较小的时候,两者在效率上的差异不大。但是 当数据变大到几千个散点时,plt.plot 的效率将大大高于 plt.scatter。这是由于 plt.scatter 会对每个散点进行单独的大小 与颜色的渲染,因此渲染器会消耗更多的资源。而在 plt.plot 中,散 点基本都彼此复制,因此整个数据集中所有点的颜色、尺寸只需要配置 一次。由于这两种方法在处理大型数据集时有很大的性能差异,因此面 对大型数据集时,plt.plot 方法比 plt.scatter 方法好。
4、基本误差线
对任何一种科学测量方法来说,准确地衡量数据误差都是无比重要的事 情,甚至比数据本身还要重要。
x = np.linspace(0, 10, 50)
dy = 0.8
y = np.sin(x) + dy * np.random.randn(50)
plt.errorbar(x, y, yerr=dy, fmt='.k')
其中,fmt 是一种控制线条和点的外观的代码格式,语法与 plt.plot 的缩写代码相同。 除了基本选项之外,errorbar 还有许多改善结果的选项。通过这些额 外的选项,你可以轻松自定义误差线图形的绘画风格。我的经验是,让 误差线的颜色比数据点的颜色浅一点效果会非常好,尤其是在那些比较 密集的图形。
连续误差
有时候可能需要显示连续变量的误差。虽然 Matplotlib 没有内置的简便 方法可以解决这个问题,但是通过 plt.plot 与 plt.fill_between 来 解决也不是很难。具体实现大家有兴趣可以自己尝试。