标签: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,供有兴趣学习参考。