scikit-learn机器学习常用算法原理及编程实战》—2.5 Matplotlib简介

网友投稿 624 2022-05-30

2.5  Matplotlib简介

Matplotlib是Python数据可视化工具包。IPython为Matplotlib专门提供了特殊的交互模式。如果要在IPython控制台使用Matplotlib,可以使用ipython --matplotlib命令来启动IPython控制台程序;如果要在IPython notebook里使用Matplotlib,则在notebook的开始位置插入%matplotlib inline魔术命令即可。IPython的Matplotlib 模式有两个优点,一是提供了非阻塞的画图操作,二是不需要显式地调用show()方法来显示画出来的图片。

Matplotlib下的pyplot子包提供了面向对象的画图程序接口。几乎所有的画图函数都与MATLAB类似,连参数都类似。在实际开发工作中,有时候甚至可以访问MATLAB的官方文档cn.mathworks.com/help/matlab来查询画图的接口和参数,这些参数可以直接在pyplot下的画图函数里使用。使用pyplot的习惯性写法是:

from matplotlitb import pyplot as plt

在机器学习领域中,我们经常需要把数据可视化,以便观察数据的模式。此外,在对算法性能进行评估时,也需要把模型相关的数据可视化,才能观察出模型里需要改进的地方。例如,我们把算法的准确度和训练数据集大小的变化曲线画出来,可以清晰地看出训练数据集大小与算法准确度的关系。这就是我们需要学习Matplotlib 的原因。

2.5.1  图形样式

通常使用IPython notebook的Matplotlib模式来画图,这样画出来的图片会直接显示在网页上。要记得在notebook的最上面写上魔术命令%matplotlib inline。

《scikit-learn机器学习常用算法原理及编程实战》—2.5 Matplotlib简介

使用Matplotlib的默认样式在一个坐标轴上画出正弦和余弦曲线:

%matplotlib inline

from matplotlib import pyplot as plt

import numpy as np

x = np.linspace(-np.pi, np.pi, 200)

C, S = np.cos(x), np.sin(x)

plt.plot(x, C)                      # 画出余弦曲线

plt.plot(x, S)                      # 画出正弦曲线

plt.show()

接着,通过修改Matplotlib的默认样式,画出我们需要的样式图片。如图2-8左侧为默认样式画出来的正余弦曲线,右侧为调整后的正余弦曲线。

图2-8  正弦余弦曲线

接下来,我们演示逐步从左侧图片过渡到右侧图片的过程。

(1)把正余弦曲线的线条画粗,并且定制合适的颜色:

# 画出余弦曲线,并设置线条颜色,宽度,样式

plt.plot(X, C, color="blue", linewidth=2.0, linestyle="-")

# 画出正弦曲线,并设置线条颜色,宽度,样式

plt.plot(X, S, color="red", linewidth=2.0, linestyle="-")

(2)设置坐标轴的长度:

plt.xlim(X.min() * 1.1, X.max() * 1.1)

plt.ylim(C.min() * 1.1, C.max() * 1.1)

(3)重新设置坐标轴的刻度。X轴的刻度使用自定义的标签,标签的文本使用了LaTeX来显示圆周率符号π。

# 设置坐标轴的刻度和标签

plt.xticks((-np.pi, -np.pi/2, np.pi/2, np.pi),

(r'$-\pi$', r'$-\pi/2$', r'$+\pi/2$', r'$+\pi$'))

plt.yticks([-1, -0.5, 0, 0.5, 1])

(4)把左侧图片中的4个方向的坐标轴改为两个方向的交叉坐标轴。方法是通过设置颜色为透明色,把上方和右侧的坐标边线隐藏起来。然后移动左侧和下方的坐标边线到原点(0, 0)的位置。

# 坐标轴总共有4个连线,我们通过设置透明色隐藏上方和右方的边线

# 通过 set_position() 移动左侧和下侧的边线

# 通过 set_ticks_position() 设置坐标轴的刻度线的显示位置

ax = plt.gca()                # gca 代表当前坐标轴,即 'get current axis'

ax.spines['right'].set_color('none')            # 隐藏坐标轴

ax.spines['top'].set_color('none')

ax.xaxis.set_ticks_position('bottom')            # 设置刻度显示位置

ax.spines['bottom'].set_position(('data',0))    # 设置下方坐标轴位置

ax.yaxis.set_ticks_position('left')

ax.spines['left'].set_position(('data',0))      # 设置左侧坐标轴位置

(5)在图片的左上角添加一个铭牌,用来标识图片中正弦曲线和余弦曲线。

plt.legend(loc='upper left')

(6)在图片中标识出。不但把这个公式画到图片上,还在余弦曲线上标识出这个点,同时用虚线画出这个点所对应的X轴的坐标。

t = 2 * np.pi / 3

# 画出 cos(t) 所在的点在 X 轴上的位置,即使用虚线画出 (t, 0) -> (t, cos(t)) 线段

plt.plot([t, t], [0, np.cos(t)], color='blue', linewidth=1.5, linestyle="--")

# 画出标示的坐标点,即在 (t, cos(t))处画一个大小为50的蓝色点

plt.scatter([t, ], [np.cos(t), ], 50, color='blue')

# 画出标示点的值,即 cos(t) 的值

plt.annotate(r'$cos(\frac{2\pi}{3})=-\frac{1}{2}$',

xy=(t, np.cos(t)), xycoords='data',

xytext=(-90, -50), textcoords='offset points', fontsize=16,

arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))

其中,plt.annotate()函数的功能是在图片上画出标示文本,其文本内容也是使用LaTex公式书写。这个函数参数众多,具体可参阅官方的API说明文档。使用相同的方法,可以在正弦曲线上也标示出一个点。

(7)定制坐标轴上的刻度标签的字体,同时为了避免正余弦曲线覆盖掉刻度标识,在刻度标签上添加一个半透明的方框作为背景。

# 设置坐标刻度的字体大小,添加半透明背景

for label in ax.get_xticklabels() + ax.get_yticklabels():

label.set_fontsize(16)

label.set_bbox(dict(facecolor='white', edgecolor='None',

alpha=0.65))

这样就完成了一个Matplotlib样式配置的过程,把默认的样式修改成我们需要的样式。读者可参阅随书代码ch02.04.ipynb。

机器学习 scikit-learn

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:那些让程序员崩溃又想笑的程序命名...
下一篇:你不得不掌握的css选择器
相关文章