Matplotlib pyplot介绍
Matplotlib是一个Python的可视化库,它广泛应用于绘制各种类型的可视化图表,包括线形图、散点图、直方图、饼图、条形图以及非常详细的统计数据可视化等。Matplotlib具有丰富的API,使得用户可以对绘图进行高度的自定义,比如调整坐标轴的位置、修改虚线样式等等。
阅读更多:Matplotlib 教程
Matplotlib.pyplot
Matplotlib.pyplot是Matplotlib的一个子模块,提供了一些简单的绘图函数,类似于Matlab,在绘制可视化图表时非常方便。Matplotlib.pyplot的主要绘图命令包括plt.plot、plt.scatter以及plt.hist等等。下面我们将会对这些函数进行简单的介绍。
plt.plot
plt.plot()函数用于绘制线形图,它可以带下面几种参数:
- x: x轴坐标;
- y: y轴坐标;
- fmt: 格式字符串,这个参数是用来定义线的样式的;
- label: 数据集标签,用于指定数据是什么。
例如,我们用 Matplotlib.pyplot 绘制一个简单的正弦曲线:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
plt.plot(x, y, '-r', label='sin(x)')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend(loc='upper left')
plt.title('A Sin Graph')
plt.show()
这个例子中,我们用np.linspace()函数生成一个100个点的x坐标轴,并以np.sin()函数作为数据源来产生相应的y坐标轴,接着我们使用plt.plot()函数用红色的实线来绘制我们的正弦曲线,并为该数据集指定了’ sin(x)’的数据集标签。最后通过调用plt.xlabel()、plt.ylabel()以及plt.title()函数来设置x轴、y轴以及标题的名称,接着我们通过plt.legend()函数来为这条曲线添加一个标签,最后我们可以通过plt.show()函数显示我们的绘图结果。
plt.scatter
plt.scatter()函数用于绘制散点图,也可以使用下面几种参数:
- x: x轴坐标;
- y: y轴坐标;
- c: 散点的颜色;
- cmap: 颜色图谱,用于帮助我们对散点做出更好的可视化;
- s: 散点的大小。
例如,在某个数据集上运行plt.scatter()函数:
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(1000)
y = np.random.randn(1000)
colors = np.random.rand(1000) * 100
plt.scatter(x, y, c=colors, alpha=0.5)
plt.colorbar()
plt.show()
这个例子的 x 和 y 是每个散点的坐标,而 colors 数组指定了每个散点的颜色。我们对 colors 取一个范围在 0-100 之间的随机值,并将其传递给 c 参数,接着通过 alpha 参数控制散点的透明度。最后,我们使用 plt.colorbar() 函数添加了一个色条,这个色条反映了颜色范围,使得数据更直观地可视化。
plt.hist
plt.hist()函数用于绘制直方图,可以使用下面的参数:
- x: 需要作为直方图的数据;
- bins: 直方图的数量。
例如,我们可以使用plt.hist()函数绘制一个随机数据集的直方图:
import numpy as np
import matplotlib.pyplot as plt
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
n, bins,patches = plt.hist(x, 50, density=1, facecolor='g', alpha=0.75)
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'\mu=100,\ \sigma=15')
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()
在这个例子中,我们使用了np.random.randn()函数来随机生成一些数据,并为每个数据指定了一个平均值mu以及标准差sigma。接着我们使用plt.hist()函数将我们的数据作为输入,设定了bins数量以及带颜色的参数,最后我们再用诸如plt.xlabel()等函数来为我们的直方图做一些细节调整。
Matplotlib.axes
Matplotlib.axes是在Matplotlib中直接操作坐标轴的主要函数之一。坐标轴是任何数据可视化的核心组件之一,它可以帮助我们准确定位图表中需要呈现的各个数据点以及它们之间的关系。Matplotlib.axes模块中的函数可以帮助我们调整各种坐标轴的特性,例如刻度、标签、边距等等。
plt.subplot
plt.subplot()函数可以用于在单个图中绘制多个子图。该函数接受三个参数,分别指定子图的行、列以及该图所在的位置。
例如,我们可以使用 Matplotlib 绘制一个包含多张子图的大图:
import matplotlib.pyplot as plt
plt.subplot(2, 1, 1)
# Draw the first plot
plt.subplot(2, 1, 2)
# Draw the second plot
plt.show()
在这个例子中,我们调用了plt.subplot()函数,并传入了三个参数,指定两行一列的图表,而第一个图位于第一行、第一列,第二个图位于第二行、第一列。
plt.subplots
如果我们需要在单个图表中绘制更多的子图,我们可以使用plt.subplots()函数来生成多个子图。plt.subplots()函数与plt.subplot()函数类似,不同之处在于它会返回一个fig对象以及一个ax对象数组。这些ax对象可以按需绘制。
例如,我们可以使用 plt.subplots() 绘制 2×2 的四个子图:
import matplotlib.pyplot as plt
fig, axs = plt.subplots(nrows=2, ncols=2)
axs[0, 0].plot([1, 2, 3, 4], [1, 4, 2, 3])
axs[0, 0].set_title('Axis [0,0]')
axs[0, 1].plot([1, 2, 3, 4], [1, 4, 2, 3])
axs[0, 1].set_title('Axis [0,1]')
axs[1, 0].plot([1, 2, 3, 4], [1, 4, 2, 3])
axs[1, 0].set_title('Axis [1,0]')
axs[1, 1].plot([1, 2, 3, 4], [1, 4, 2, 3])
axs[1, 1].set_title('Axis [1,1]')
for ax in axs.flat:
ax.set(xlabel='x-label', ylabel='y-label')
plt.show()
在这个例子中,我们调用了plt.subplots()函数,指定了两行两列的图表,接着我们按照需要为每个subplots添加数据再用坐标轴上的函数进行设置,最后调用fig.show()函数来呈现我们的图像。
Matplotlib.formatter
坐标轴的格式化也是 Matplotlib.axes 模块中非常重要的一部分,它可以帮助用户通过特定的方式设置坐标轴的细节,包括标签、数字格式、标记等等。
Formatter类
Formatter类是 Matplotlib.axes 中一个非常有用的类。它可以帮助我们创建自定义格式的坐标轴标签,使得数据可视化更加易于理解。Formatter类的子类包括FormatStrFormatter、ScalarFormatter、LogFormatter、FixedFormatter和FuncFormatter等等。
例如,我们可以自己创建一个Formatter类并使用plt.plot()函数绘制一条带有自定义格式坐标轴标签的曲线:
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np
fig, ax = plt.subplots()
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
ax.plot(x, y, '-r')
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))
ax.yaxis.set_major_formatter(ticker.FormatStrFormatter('%0.2f'))
plt.show()
在这个例子中,我们使用了np.linspace()函数生成了x轴坐标值以及sin()函数生成y轴坐标值,接着用plt.plot()函数绘制了一条红色直线。然后,我们使用ax.xaxis.set_major_formatter()方法和ax.yaxis.set_major_formatter()方法对x轴和y轴的标签进行格式化。这里,我们使用了FormatStrFormatter类,并指定了需要的格式。
FuncFormatter类
除了FormatStrFormatter类外,你还可以使用FuncFormatter类来自定义坐标轴标签的格式。这个类允许我们编写一个自定义函数来对坐标轴标签进行格式化。
例如,我们可以使用FuncFormatter类定义一个格式化1000以下的数字,用K代替它们。下面是一个例子:
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np
def format_func(x, pos):
"""对坐标轴标签进行格式化的函数"""
if x < 1000:
return '{:,.0f}'.format(x)
else:
return '{:,.0f}K'.format(x//1000)
fig, ax = plt.subplots()
x = np.linspace(0, 10000, 1000)
y = np.random.randn(1000)
ax.plot(x, y, '-r')
ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_func))
plt.show()
在这个例子中,我们定义了一个format_func()函数,并将其传递给了FuncFormatter类。这个自定义的函数接受两个参数,第一个参数 x 是要被格式化的值,第二个参数 pos 是未使用的参数,仅被占位而已。如果 x 小于 1000,那么 format_func() 函数将返回一个整数,否则将返回一个整数,并将大于 1000 的部分除以 1000,在其后面添加一个 K。
最后的效果是,我们的坐标轴标签会自动地格式化为 1k,2k,3k 等等。
极客教程