Matplotlib在Python中的介绍

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

什么是Matplotlib

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

该库主要使用Python编写,其余部分使用C objective和JavaScript编写,使其具有平台兼容性。

Matplotlib使用Python数值扩展NumPy。与NumPy的扩展相结合,它作为开源替代方案具有一定的可行性,并且比MATLAB更受偏好。

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

用户只需使用几行Python代码就可以使用不同的图表(包括散点图、直方图、条形图、饼图、折线图和箱线图)来可视化数据。

您可以在Python shell、Jupyter notebook、Jupyter lab以及使用Pycharm或Anaconda等IDE以及Flask和Django等Web应用程序服务器上使用Matplotlib在各种平台上创建图表。

与MATLAB一样,您可以广泛控制字体、线条、颜色和样式方面的图表。

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

设置Matplotlib环境

与其他软件包和库一样,您可以使用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软件包的开发人员必须在其系统中具有正确的编译器,以及依赖项、设置脚本、配置文件和补丁。

然而,对于Matplotlib新手用户来说,这种特定的未编译Matplolib安装可能很复杂。因此,为什么不使用一行命令在几秒钟内安装该库呢?🤔

在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)

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

例如,让我们表示一个名为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)

输出:

Matplotlib中条形图的输出

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

#2. 如何创建饼图

Matplotlib使用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("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。explode值定义了切片相对于饼图中心的距离。

从上图可以看出,因为它的explode值大于其他切片,所以切片x距离较远。shadow属性在饼图中添加了一个阴影,autopct设置每个切片相对于整个饼图的百分比。

#3. 创建一个直方图

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

与其他绘图不同,使用Matplotlib绘制直方图需要遵循一些预定义步骤来创建图形。

这些步骤包括:

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

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

x – 这表示数组序列

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

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

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('Histogram plot example')
plt.xlabel('x axis')
plt.ylabel('frequency')
plt.show()

输出:

Matplotlib中直方图绘制的输出

#4. Matplotlib中的折线图

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

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

在绘图时,导入matplotlib.pyplot和Numpy,这样可以绘制图表。通过传递随机值给x和y参数,plot(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('折线图示例')
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) 

与其他参数可以可选且其值为None不同,x_axis_data和y_axis_data参数不能为空。虽然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还有几个other libraries可以供机器学习专家和数据科学家用来创建可视化。

你可以探索更多使用Matplotlib可以创建的图形以及用于创建图形的函数。

愉快的绘图!📉📊

类似文章