机器学习入门 3-11 Matplotlib数据可视化基础

2022-11-08 13:25:11 浏览数 (1)

matplotlib 基础

Matplotlib 是一个 Python 的 2D 绘图库,在导入 Matplotlib 库的时候,通常会设置一个别名 mpl。Pyplot 是 Matplotlib 的子库,提供了和 MATLAB 类似的绘图 API。使用 Pyplot 可以很方便的帮助我们绘制出 2D 图表,在使用 Pyplot 时候通常也会为 Pyplot 设置一个别名 plt。

代码语言:javascript复制
import matplotlib as mpl
import matplotlib.pyplot as plt

为了绘制图像,这里创建一个一维向量作为自变量 x,并构建正弦函数输出因变量 y。

代码语言:javascript复制
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)

为了更好地观察自变量 x 和因变量 y 的关系,最直观的就是绘制函数曲线。我们可以使用 plt.plot 绘制 x 和 y 的曲线,plt.plot 的返回值为 matplotlib.lines.Line2D,要想显示绘制曲线,还需要调用 plt.show。这里需要说明,绘制曲线的时候,我们可以指定各种样式,设置这些样式有两种方式:

  • 第一种,通过为 plt.plot 传入指定参数;
  • 第二种,通过 plt.plot 的返回值来设置,也就是使用返回的 matplotlib.lines.Line2D 对象,调用对象一些设置样式的方法。

一般使用第一种方式。

代码语言:javascript复制
plt.plot(x, y)
plt.show()

plt.plot 实质绘制的是折线图,也就是说点与点之间是通过直线连接的,只不过我们采样的 100 个点比较密集,因此最终绘制的图像整体看上去是一个非常平滑的曲线。如果我们采样的间隔点比较远的话,可以很清楚的看出两点之间是通过一条直线连接的。

代码语言:javascript复制
x_1 = np.linspace(0, 10, 10)
y_1 = np.sin(x_1)

plt.plot(x_1, y_1)
plt.show()

我们可以同时绘制多个曲线。

代码语言:javascript复制
cosy = np.cos(x)
siny = y.copy()

plt.plot(x, siny)
plt.plot(x, cosy)
plt.show()

plt.plot 传入 color 参数更改绘制曲线的颜色。

代码语言:javascript复制
plt.plot(x, siny)
plt.plot(x, cosy, color = "red")
plt.show()

plt.plot 传入 linestyle 参数更改绘制曲线的样式。

代码语言:javascript复制
plt.plot(x, siny)
plt.plot(x, cosy, color = "red", linestyle = "--")
plt.show()

各种样式以及对应的取值。

使用 plt.xlimplt.ylim 分别对图像的横、纵坐标轴的取值范围进行限定。

代码语言:javascript复制
plt.plot(x, siny)
plt.plot(x, cosy, color = "red", linestyle = "--")
plt.xlim(-5, 15)
plt.ylim(0, 1.5)
plt.show()

还可以使用 plot.axis 同时对横纵坐标轴的取值范围进行调整,参数为一个列表,列表中前两个值为横坐标轴的取值范围,后两个值为纵坐标轴的取值范围。

代码语言:javascript复制
plt.plot(x, siny)
plt.plot(x, cosy, color = "red", linestyle = "--")
plt.axis([-1, 11, -2, 2])
plt.show()

可以使用 plt.xlabelplt.ylabel 为横纵坐标轴赋予含义。

代码语言:javascript复制
plt.plot(x, siny, label = "sin(x)")
plt.plot(x, cosy, color = "red", linestyle = "--")
plt.xlabel("x axis")
plt.ylabel("y value")
plt.legend()
plt.show()

同时可以显示图例,用于说明各个曲线。

代码语言:javascript复制
# 直接对两个轴进行调整
plt.plot(x, siny, label = "sin(x)")
plt.plot(x, cosy, color = "red", linestyle = "--", label = "cos(x)")
plt.xlabel("x axis")
plt.ylabel("y value")
plt.legend()
plt.show()

使用 plt.title 为图表起标题。

代码语言:javascript复制
plt.plot(x, siny, label = "sin(x)")
plt.plot(x, cosy, color = "red", linestyle = "--", label = "cos(x)")
plt.xlabel("x axis")
plt.ylabel("y value")
plt.legend()
plt.title("Welcome to the ML World!")
plt.show()

绘制散点图

绘制折线图使用 plt.plot,绘制散点图使用 plt.scatter

代码语言:javascript复制
plt.scatter(x, siny) 
plt.scatter(x, cosy, color = "red") 
plt.show()

在机器学习中,通常将绘制折线图的横坐标表示为特征,纵坐标表示为对应的取值,但是在散点图中,横纵坐标轴都表示为特征,而散点图的形状或者颜色表示为对应的取值。在两个特征的分类任务中,我们将横坐标表示为第一个特征,纵坐标表示为第二个特征,将类别信息通过散点图的颜色进行表示。

代码语言:javascript复制
x = np.random.normal(0, 1, 10000)
y = np.random.normal(0, 1, 10000)
plt.scatter(x, y, alpha = 0.1) # alpha为透明图
plt.show()

References:

Python3入门机器学习 经典算法与应用: https://coding.imooc.com/class/chapter/169.html#Anchor

0 人点赞