Python 中的 Matplotlib 简介

Matplotlib是一个强大的Python绘图工具库,在机器学习领域中,专家们通常会利用它来生成静态或交互式的可视化图表。

Matplotlib简介

Matplotlib由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 Lab,以及PyCharm或Anaconda等IDE,同时也能与Flask和Django等Web应用程序服务器兼容。

与MATLAB类似,Matplotlib允许用户对图表的各个方面进行细致的控制,包括字体、线条、颜色和样式等。

在简要介绍了Python中的Matplotlib库之后,让我们看看如何在您的系统上安装它。

配置Matplotlib环境

如同其他Python包和库一样,您可以借助pip包管理器在各种操作系统上安装预编译的Matplotlib库及其依赖项。

当然,前提是您的系统已经安装了Python和pip包管理器。

以下命令可以用来检查Python和pip的版本,从而确认这些工具是否已正确安装。

检查Python是否已安装

Python --version

检查pip是否已安装

pip -V

安装Matplotlib

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

python -m pip install matplotlib

这个命令会下载并安装Matplotlib及其相关的软件包。安装完成后,您应该会看到安装成功的提示信息。

为了验证Matplotlib是否成功安装,请输入以下命令,它会在命令提示符中显示Matplotlib的版本。

import matplotlib
matplotlib.__version__

对于希望安装未编译的Matplotlib包的开发者,除了需要依赖项、设置脚本、配置文件和补丁之外,还必须确保其系统具备正确的编译器环境。

然而,这种未编译的Matplotlib安装可能较为复杂,尤其是对于初次接触Matplotlib的用户而言。因此,为什么不直接使用一行命令在几秒钟内安装好库呢?🤔

安装Matplotlib后,将该包导入您的开发环境中,以便访问其提供的各种实用工具。

Matplotlib绘图选项

Matplotlib提供了丰富的绘图选项,用于可视化数据。它还支持通过不同的主题、颜色和调色板选项来自定义图表,从而允许用户对图表进行精细的控制。

这些绘图选项包括:

#1. 条形图

条形图,也称为柱状图,是可视化同一类别中不同数值比较的理想选择。

Matplotlib使用矩形条来表示数据,条的长度和高度代表其数值大小。条形可以水平或垂直显示。

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

此外,您可以使用其他函数来进一步自定义图表。例如,plt.xlabel()plt.ylabel()函数分别用于标记图形的x轴和y轴。

plt.title()函数可以为图表指定标题,而plt.savefig()函数用于保存图表。最重要的是,plot.show()函数用于显示图表。

#2. 饼图

饼图是一种圆形统计图,用于可视化同一类别中各个项目所占的比例分布。

饼图以百分比形式显示数据。图表的整个圆形区域代表总数据的百分比,而各个扇形切片代表了各个部分的数据百分比。

Matplotlib使用plt.pie()函数来绘制和调整饼图的参数。
诸如autopct等更多参数,可以将饼图的值精确到小数点后一位,这在绘制饼图时非常有用。

商业组织常使用饼图来展示诸如运营、销售或资源等相关信息。

#3. 直方图

直方图用于展示数值数据的分布情况。它通过连续的间隔将数据划分为不同的组。

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

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

#4. 折线图

折线图用于显示两个数据值之间的关系,这两个数据值可以定义为数值型或分类型,分别在X轴和Y轴上。

折线图对于跟踪数据值随时间变化的情况非常有用。

#5. 散点图

散点图可以揭示数据中变量之间的关系,包括它们的相关性。它在识别异常值方面也非常有效。

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

如何在Matplotlib中创建图表

Matplotlib使用不同的函数来创建不同类型的图表。它只需要少量代码行就可以生成各种图表。

接下来,我们将看看如何使用Matplotlib中的不同函数来创建不同的绘图。

#1. Matplotlib中的条形图

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

Matplotlib中的bar()函数接受不同的参数布局,用于描述条形的布局,如下所示。

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

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

例如,让我们可视化一个动物收容所(名为x)中狗和猫的数量。

import matplotlib.pyplot as plt
import numpy as np

x = ["Cats", "Dogs"]
plt.xlabel("收容所中的猫和狗")
plt.ylabel("收容所动物数量")
plt.title("收容所 x 中的猫和狗的数量")
y = [300, 350]
plt.bar(x, y, color="black", width = 0.5)

输出:

Matplotlib中条形图的输出

如上例所示,您可以使用color属性进一步指定条形的颜色。此外,plt.xlabelp.ylabel分别用于命名x轴和y轴,而plt.title用于命名图表。

#2. 如何创建饼图

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

语法:

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

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

为了在饼图中包含每个切片的详细信息,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("随机项目的资源分配")
plt.pie(y, labels = mylabels, colors=colors,explode = explodevalues, autopct="%1.1f%%", shadow = True)
plt.show() 

输出:

Matplotlib中饼图的输出

上图显示了一个饼图,其中四个切片分别标记为w、x、y和z。爆炸值定义了切片与饼图中心的距离。

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

#3. 创建直方图

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

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

这些步骤包括:

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

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

x – 表示数组序列。

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

range – 它定义了箱子的上限和下限。

align – 此参数控制直方图的对齐方式。可以是左对齐、右对齐或居中对齐。

color – 定义条形的颜色。

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

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('直方图示例')
plt.xlabel('x 轴')
plt.ylabel('频率')
plt.show()

输出:

Matplotlib中直方图的输出

#4. Matplotlib中的折线图

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

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

在绘制图形时,导入matplotlib.pyplotNumpy来绘制图表。plot(x,y)方法通过向x和y参数传递随机值来创建折线图。

此外,您可以传递一个标签变量来标记图表。title函数用于命名图表的标题,而xlabelylabel函数用于命名轴。最后,show()函数用于显示图表。

例如:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 5, 10)

y = 3*x + 2
plt.title('折线图示例')
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.plot(x, y)
plt.show()

结果:

Matplotlib中折线图的输出

np.linspace属性在图表上返回一组在特定间隔上均匀分布的x值。这将创建一个包含0到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_datay_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('散点图示例')
plt.xlabel('x变量')
plt.ylabel('y变量')
plt.scatter(x, y, c ="green")
 
# 显示图表
plt.show()

其输出将如下所示:

Matplotlib中散点图的输出

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

# 图表 1:
x = np.array([2, 4, 6, 8])
y = np.array([3, 6, 9, 12])

plt.subplot(2, 1, 1)
plt.plot(x,y)

# 图表 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函数绘制两个具有一行和两列的图形。 这将并排显示图表。

import matplotlib.pyplot as plt
import numpy as np

# 图表 1:
x = np.array([2, 4, 6, 8])
y = np.array([3, 6, 9, 12])

plt.subplot(1, 2, 1)
plt.plot(x,y)

# 图表 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()

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

嗯,这是一个很有趣的交互,你不觉得吗?😃

最后总结

Matplotlib是Python中一个卓越的可视化工具库。其交互性和易用性,即使对于初学者而言,也使其成为在Python中进行绘图的更优选择。

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

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

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

快乐地绘制图表!📉📊