Python基础:使用Matplotlib绘制多个图形

2022-06-04 09:48:14 浏览数 (1)

标签:Python,Matplotlib

Python的Matplotlib库是使用最广泛的数据可视化库之一。使用Matplotlib,可以使用各种图表类型绘制数据,包括折线图、条形图、饼图和散点图。

Matplotlib允许绘制单个图表,但也允许以网格的形式一次绘制多个图表。

在本文中,将详细演示如何使用Matplotlib库绘制多个图。

绘制单个图

在展示如何绘制多个图之前,先通过一个演示如何使用Matplotlib绘制单个图的示例,确保掌握了基本原理。在这个例子中,将画一个直线图。

要使用Matplotlib绘图,使用Matplotlib库中的pyplot子模块。

具体来说,要绘制折线图,需要从pyplot模块调用plot()函数,并将x轴和y轴的值列表传递给它。

下面的脚本为正弦函数绘制了折线图,输入值由-100到100之间的50个等距点组成。

代码语言:javascript复制
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
x= np.linspace(-100, 100, 50)
y_sin= [np.sin(i) for i in x]
plt.plot(x,y_sin, 'bo-')

结果如下图1所示。

图1

注意:%matplotlib inline代码段仅适用于Jupyter笔记本。如果不使用Jupyter笔记本,只需在开始绘制图之后添加plt.show()即可。

绘制多个图形

一旦知道怎么做,就可以绘制多个图了。同样,Matplotlib允许以网格的形式绘制多个图。有几种方法可以做到这一点:

1.使用subplot()函数

2.使用subplots()函数

使用subplot()函数

要使用pyplot模块中的subplot()函数绘制多个绘图,需要执行两个步骤:

首先,需要使用三个参数调用subplot()函数:(1)网格的行数,(2)网格的列数,以及(3)用于绘图的位置或轴。例如,subplot(2,3,1)告诉Python解释器,下一个图应该绘制在包含2行和3列的网格中,并且该图应该出现在网格中的第一个位置(第1行,第1列)。绘图位置的顺序首先从左到右,然后从上到下。这意味着subplot(2,3,4)命令将在网格的第二行和第一列绘制绘图。

在执行subplot()命令之后,只需调用要使用pyplot模块绘图的相应函数或图表类型。例如,下面的脚本使用plot()方法制作折线图。

这个脚本将使用subplot()函数在两行三列的网格中绘制六个折线图。

代码语言:javascript复制
import matplotlib.pyplot as plt
import numpy as np
import math
%matplotlib inline
x= np.linspace(-100, 100, 50)
y_sin= [np.sin(i) for i in x]
y_cos= [np.cos(i) for i in x]
y_tan= [np.tan(i) for i in x]
y_log= [np.log(i) for i in x]
y_exp= [np.exp(i) for i in x]
y_sqr= [i*i for i in x]
plt.rcParams["figure.figsize"]= [12,8]
plt.subplot(2,3,1)
plt.plot(x,y_sin, 'bo-')
plt.subplot(2,3,2)
plt.plot(x,y_cos, 'rx-')
plt.subplot(2,3,3)
plt.plot(x,y_tan, 'g*-')
plt.subplot(2,3,4)
plt.plot(x,y_log, 'y<-')
plt.subplot(2,3,5)
plt.plot(x,y_exp, 'g')
plt.subplot(2,3,6)
plt.plot(x,y_sqr, 'r*-')
plt.show()

结果如下图2所示。

图2

使用subplots()函数

使用subplot()函数,需要为每个后续绘图设置位置,而subplots()函数消除了这一要求。

可以使用pyplot模块中的subplot()函数一次设置网格的行数和列数。行数和列数作为整数值传递给subblots()函数的nrows和ncols属性。根据行数和列数,subplot()函数返回AxesSubplot对象的列表。

例如,在下面的脚本中,调用subplots()方法创建一个包含2行3列的网格。下面脚本中的“axes”变量包含控制台上打印的“AxesSubplot”对象列表。

代码语言:javascript复制
import matplotlib.pyplot as plt
import numpy as np
import math
x= np.linspace(-100, 100, 50)
y_sin= [np.sin(i) for i in x]
y_cos= [np.cos(i) for i in x]
y_tan= [np.tan(i) for i in x]
y_log= [np.log(i) for i in x]
y_exp= [np.exp(i) for i in x]
y_sqr= [i*i for i in x]
plt.rcParams["figure.figsize"]= [12,8]
fig,axes = plt.subplots(nrows = 2, ncols = 3)
print(axes)
print(axes.shape)
plt.show()

在输出中,可以看到与网格的行和列对应的列表,还可以看到空轴。结果如下图3所示。

图3

下一步是在这些空图表中绘制图表。为此,必须从AxeSubPlot对象列表中选择一项,并使用该对象调用plot()函数。

例如,要在网格的第一行和第一列绘制图,需要访问索引[0,0]处的AxeSubPlot。注意,子绘图的索引编号从0开始。

下面的脚本使用subplot()函数在两行三列中绘制六个折线图。

代码语言:javascript复制
import matplotlib.pyplot as plt
import numpy as np
import math
x= np.linspace(-100, 100, 50)
y_sin= [np.sin(i) for i in x]
y_cos= [np.cos(i) for i in x]
y_tan= [np.tan(i) for i in x]
y_log= [np.log(i) for i in x]
y_exp= [np.exp(i) for i in x]
y_sqr= [i*i for i in x]
plt.rcParams["figure.figsize"]= [12,8]
fig,axes = plt.subplots(nrows = 2, ncols = 3)
axes[0,0].plot(x,y_sin, 'bo-')
axes[0,1].plot(x,y_cos, 'rx-')
axes[0,2].plot(x,y_tan, 'g*-')
axes[1,0].plot(x,y_log, 'y<-')
axes[1,1].plot(x,y_exp, 'g')
axes[1,2].plot(x,y_sqr, 'r*-')

结果如下图4所示。

图4

注:本文学习整理自wellsr.com,供有兴趣学习参考。

0 人点赞