Python 中的 Matplotlib 简介

已发表: 2022-10-04

Matplotlib 是一个 Python 绘图库,机器学习专家主要使用它来创建静态和交互式可视化。

什么是 Matplotlib

Mathplotlib 是 John D. Hunter 于 2003 年创建的,于 2021 年 5 月 8 日发布,当前版本为 3.4.2。

这个库主要是用 Python 编写的,其余的是用 C 目标和 JavaScript 编写的,使其与平台兼容。

Matplotlib 使用 NumPy,这是一个 Python 数值扩展。 它对 NumPy 的扩展增加了它作为开源替代品的可行性,使其比 MATLAB 更受欢迎。

对于 Python GUI 应用程序,Matplotlib 允许使用它附带的面向对象的 API 在其上绘制静态图。

用户只需编写几行 Python 代码即可使用不同的图表来可视化他们的数据,包括散点图、直方图、条形图、饼图、折线图和箱线图。

您可以使用 Matplotlib 在 Python shell、Jupyter notebook、
Jupyter 实验室,还使用 ​​Pycharm 或 Anaconda 以及跨各种平台的 Flask 和 Django 等 Web 应用程序服务器。

就像在 MATLAB 中一样,您可以根据字体、线条、颜色和样式广泛控制绘图。

在简单介绍了 Python 中的 Matplotib 库之后,让我们看看如何在我们的系统中设置它。

设置 Matplotlib 环境

与任何其他 Python 包和库一样,您可以使用 pip 包管理器在所有操作系统上安装预编译的 Matplotlib 库及其包。

当然,它需要您首先在系统上安装 Python 和 pip 包。

以下命令显示 Python 和 pip 的版本,以确认这些工具是否已安装。

检查是否安装了 Python

 Python --version

检查是否安装了 pip

 pip -V

安装 Mathplotlib

下面的命令从 Python 包索引 (PyPI) 安装 Matplotlib 包。

 python -m pip install matplotlib

该命令下载并安装 Matplotlib 的相关包。 安装完成后,您应该会看到安装成功的消息。

为确保 Matplotlib 已成功安装,请键入以下命令,该命令将在命令提示符中显示 Matplotlib 的版本。

 import matplotlib matplotlib.__version__

希望安装未编译的 Matplotlib 包的开发人员除了依赖项、设置脚本、配置文件和补丁外,还必须能够访问其系统中正确的编译器。

但是,这种特殊的未编译 Matplolib 安装可能很复杂,尤其是对于 Matplotlib 新手用户。 因此,为什么不直接使用一条命令在几秒钟内安装库呢?

安装 Matplotlib 后,将包导入您的环境以访问其实用程序。

Matplotlib 绘图选项

Matplotlib 提供了许多绘图选项来可视化数据。 它还允许通过提供不同的主题、颜色和调色板选项来自定义绘图,用户可以使用这些选项来操作绘图。

这些绘图选项包括:

#1。 条形图

条形图,也就是著名的条形图,是可视化同一类别中值的定量比较的合适选项。

条形图-1

Matplotlib 使用矩形条表示此图,其中它们的长度和高度代表它们的比例值。 条可以是水平的或垂直的。

Matplotlib 使用其plt.bar()函数来创建条形图。

此外,您可以使用更多函数来操作此图。 例如, plt.xlabel()plt.ylabel()函数,标记图形的 x 和 y 轴。

plt.title()函数还允许您为绘图指定标题,而plt.savefig()函数保存绘图。 最重要的plot.show()函数显示绘图。

#2。 饼图

您可以使用我们称为饼图的圆形统计图来可视化项目在同一类别中的比例分布。

饼图以百分比形式显示数据。 图表的整个区域对应于整个数据的百分比,而各个饼图切片代表数据百分比的各个部分。

饼形图

Matplotlib 使用plt.pie()函数绘制和调整饼图的参数。
更多的参数,如将饼图值打印到小数点后 1 位的autopct ,在绘制饼图时很有用。

商业组织发现饼图可用于呈现相关信息,例如运营、销售或资源。

#3。 直方图

直方图显示数字数据分布。 它使用连续间隔将数据分成不同的部分。

直方图和条形图之间的主要区别在于它们处理的数据类型。 直方图处理连续数据类型,而条形图处理分类数据。

直方图

Matplotlib 使用hist()函数,该函数使用一组随机或定义的值来创建直方图。

#4。 线图

这些图可用于显示我们在 X 和 Y 基础上定义为数值和分类的两个数据值之间的关系。

线形图

线图对于跟踪一段时间内数据值的变化非常重要。

#5。 散点图

散点图指出了关系,包括数据中变量之间的相关性。 它在识别异常值方面也很有用。

散点图

散点图使用点来表示数据变量的关系以及一个变量的变化如何影响另一个变量。

如何在 Matplotlib 中创建绘图

Matplotlib 使用不同的函数来创建不同的图。 它还使用很少的代码行来创建绘图。

下面我们看看如何使用 Matplotlib 中的不同函数创建不同的绘图选项。

#1。 Matplotlib 中的条形图

如上所述,条形图使用表示一个轴上的类别与另一轴上的类别的相应值的比较的条形图和轴显示数据类别。

Matplotlib 中的bar()函数采用不同的参数布局来描述条的布局,如下所示。

 plt.bar(x, y, height, width, bottom, align)

x 和 y 参数表示图中条形的 x 坐标值和 y 坐标值。 width 参数表示 bar 的宽度,而 height 参数表示 bar 的高度。

例如,让我们表示一个名为 x 的动物收容所中的狗和猫的数量。

 import matplotlib.pyplot as plt import numpy as np x = ["Cats", "Dogs"] plt.xlabel("Cats and Dogs in Shelter") plt.ylabel("No. of animals in Shelter") plt.title("Number of cats and dogs in shelter x") y = [300, 350] plt.bar(x, y, color ='black', width = 0.5)

输出:

条形图
Mathplotlib 中条形图的输出

如上例所示,您可以使用 color 属性进一步指定条形的颜色。 此外, plt.xlabel and p.ylabel name the x and y axes,plt.title命名绘图。

#2。 如何创建饼图

Matplotlib 使用pyplot模块自带的pie()函数绘制饼图。
该函数表示要以数组形式绘制的数据。

句法:

 matplotlib.pyplot.pie(data, explode=None, labels=None, colors=None, autopct=None, shadow=False)

颜色参数设置饼图的颜色。 您可以使用一组值来为每个切片指定颜色。

为了进一步包含饼图中每个切片的详细信息, autopct参数使用 Python 的字符串格式表示法添加每个切片表示的数字百分比。 作为参数的 explode 接受从 0.1 开始的值数组,以定义切片与饼图中心的距离。

让我们绘制一个饼图,显示为特定项目分配的资源百分比。

 import matplotlib.pyplot as plt import numpy as np y = np.array([25, 10, 45, 20]) mylabels = ["w", "x", "y", "z"] explodevalues = [0.1, 0.2, 0, 0] colors = ['tab:blue', 'tab:green', 'tab:orange', 'tab:red'] plt.title("Resources allocated for a random project") plt.pie(y, labels = mylabels, colors=colors,explode = explodevalues, autopct='%1.1f%%', shadow = True) plt.show()

输出:

饼图
Mathplotlib 中饼图的输出

上图显示了一个饼图,其中四个切片分别标记为 w、x、y 和 z。 爆炸值定义切片将放置在离饼中心多远的位置。

从上图中,x 更远,因为它的爆炸值大于其他值。 shadow 属性为饼图添加阴影,如图所示,而autopct设置每个切片表示的整个饼图的相对百分比。

#3。 创建直方图

对于直方图,我们将使用一系列区间来表示 x 轴上给定值的范围。
另一方面,y 轴将代表频率信息。

与其他绘图不同,在 Matplotlib 中绘制直方图需要一些预定义的步骤来创建绘图。

这些步骤包括:

  1. 从您拥有的一组数据值中创建一个范围箱。 您可以使用可以为您生成随机值的np.random.normal()函数。
  2. 使用一系列间隔,将值分配到一系列值中。
  3. 计算每个特定间隔内的值。
  4. 现在使用matplotlib.pyplot.hist()函数来创建直方图。

hist()函数接受几个参数,包括:

x - 这表示数组序列

bins – 这是一个可选参数,表示可能包含整数或字符串序列的变量的非重叠区间。

range - 它定义了 bin 的上限和下限

align - 此参数控制直方图的对齐方式。 无论是左、右还是中间。

color - 它定义了条形的颜色。

rwidth – 将直方图中条形的相对宽度设置为 bin 的相对宽度。

log – log 参数定义直方图轴上的对数刻度。

以下示例使用定义的值绘制直方图。

 from matplotlib import pyplot as plt x = [22, 40, 87, 5, 43, 30, 56,73, 55, 54, 11, 20, 51, 5, 50, 60, 70, 80] plt.hist(x) plt.title(Histogram plot example') plt.xlabel('x axis') plt.ylabel('frequency') plt.show()

输出:

显示直方图的图像
Mathplotlib 中直方图的输出

#4。 Matplotlib 中的线图

Matplotlib 使用其名为pyplot的子库,它带有各种有助于其实现的函数。

我们使用plot()函数,它是pyplot附带的通用函数来绘制线图和其他不同类型的线图,包括曲线图和多线图。 创建这些不同类型的图取决于您传递给 y 轴的值。

绘图时,导入matplotlib.pyplot和 Numpy,绘制图表。 plot(x,y)方法通过将随机值传递给 x 和 y 参数来创建线图。

此外,您可以传递一个标签变量来标记绘图。 title 函数进一步命名绘图的标题,而 xlabel 和 ylabel 函数命名轴。 最后,show() 函数显示绘图。

例如:

 import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 5, 10) y = 3*x + 2 plt.title('Line plot example') plt.xlabel('x axis') plt.ylabel('y axis') plt.plot(x, y) plt.show()

结果:

line_plot-1
Mathplotlib 中线图的输出

np.linspace属性在绘图上返回一组在特定间隔上的 x 值的均匀间隔数字。 这将在0 and 5范围内创建一个包含 10 个值的数组。 y 值是根据使用 x 对应值的方程创建的。

创建散点图

Matplotlib 使用 scatter() 方法来创建这个图。
该方法接受以下参数。

 matplotlib.pyplot.scatter(x_axis_data, y_axis_data, s=None, c=None, marker=None, cmap=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None)

x_axis_data 和 y_axis_data 参数不能留空,这与其他参数不同,这些参数可以是可选的并且其值为 None。 x_axis_data 参数定义了 x 轴的数据数组,而 y_axis_data 设置了 y 轴的数据数组。

matplotlib 中的散点图示例

import matplotlib.pyplot as plt x =[15, 17, 18, 27, 22, 27, 32, 14, 11, 12, 29, 16] y =[19, 16, 17, 18, 10, 26, 13, 27, 14, 18, 17, 35] plt.title('Scatter plot example') plt.xlabel('x variable') plt.ylabel('y variable') plt.scatter(x, y, c ="green") # To show the plot plt.show()

它的输出将像:

在 Matplotib 中显示散点图的图像
Mathplotlib 中散点图的输出

matplotlib 中的 subplot() 是什么

subplot()函数可用于在单个 Matplotlib 图上绘制多个图。 这允许查看和比较图中的多个图。

该函数将返回一个带有三个参数的元组; 行和列分别作为第一个和第二个参数,当前绘图的索引作为第三个参数。

行和列清楚地定义了 Matplotlib 的布局。

因此, plt.subplot(2, 1, 1)将绘制一个两行一列的 Matplotlib 图,这个图将是第一个图。

另一方面, plt.subplot(2, 1, 2)显示第二个图,其中包含两行一列。

绘制这两个图将在彼此之上创建它们,如下例所示。

 import matplotlib.pyplot as plt import numpy as np #plot 1: x = np.array([2, 4, 6, 8]) y = np.array([3, 6, 9, 12]) plt.subplot(2, 1, 1) plt.plot(x,y) #plot 2: x = np.array([3, 6, 9, 12]) y = np.array([1, 2, 3, 4]) plt.subplot(2, 1, 2) plt.plot(x,y) plt.show()

上述示例的输出将如下图所示。

使用 subplot 在彼此之上创建两个图

使用不同的示例,让我们使用 subplot 函数来绘制两个具有一行和两列的图形。 这将并排显示图。

 import matplotlib.pyplot as plt import numpy as np #plot 1: x = np.array([2, 4, 6, 8]) y = np.array([3, 6, 9, 12]) plt.subplot(1, 2, 1) plt.plot(x,y) #plot 2: x = np.array([3, 6, 9, 12]) y = np.array([1, 2, 3, 4]) plt.subplot(1, 2, 2) plt.plot(x,y) plt.show()

上面的示例将显示以下结果。

子情节2

嗯,这是有趣的互动,你不这么认为吗?

最后的话

Matplotlib 是 Python 中一个著名的可视化库。 它的交互性和易用性即使对于初学者也是如此,使其成为在 Python 中进行绘图的更好工具。

本文介绍了 Matplotlib 附带的函数可以创建的各种图的示例,包括饼图、条形图、直方图和散点图。

当然,Python 还有其他几个库可供机器学习专家和数据科学家用来创建可视化。

您可以探索更多可以使用 Matplotlib 创建的绘图,以及您将使用哪些函数来创建绘图。

快乐的阴谋!