matplotlib是python中常用的一个绘图库,他的功能相当于matlab,基本上matlab上能实现的绘图功能都能够通过matplotlib库来在python中进行实现。
这里,我们就来简单地看一下如何使用matplotlib库来绘制一些常见的图。
matplotlib绘图使用的是其中的pyplot库,其核心思想包括以下几个步骤:
通常来说,对于一般的图表,第一个步骤往往是可以省略的,pyplot库在收到图表绘制命令的时候会自动创建一个默认画布,因此,一个最简单的图表绘制代码就可以表达为如下:
import numpy
x = numpy.linspace(0, 6.28, 100)
y = numpy.sin(x)
plt.plot(x, y)
plt.show()
运行后即可得到下图:
更为规范一点的写法如下,两者的处理结果完全一致:
import numpy
x = numpy.linspace(0, 6.28, 100)
y = numpy.sin(x)
plt.figure()
plt.plot(x, y)
plt.show()
下面,我们来讨论一下一些典型的常用图表的绘制方法。
直方图的绘制命令主要是hist
命令,它的定义如下:
matplotlib.pyplot.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, *, data=None, **kwargs)[source]
其中,几个比较重要的参数的解释如下:
给出一个样例如下:
import numpy
x = numpy.random.normal(0, 1, 100000)
plt.figure(figsize=(12, 5))
plt.hist(x, bins=101, range=(-4,4), density=True)
plt.show()
运行即可得到一个高斯分布的直方图。
更详细的用法说明可以参考官网链接:
类似的,我们也可以快速地使用hist2d
函数绘制出二维空间中的统计分布图。
饼状图的绘制命令为pie函数,给出一个简单的实现样例如下:
import numpy
x = numpy.random.normal(0, 1, 100)
plt.figure(figsize=(7, 7))
plt.pie([0.1, 0.2, 0.3, 0.4], labels=["A", "B", "C", "D"])
plt.show()
更详细的函数说明可以参考官网函数说明:
散点图的绘制使用的是pyplot库中的scatter函数,其定义如下:
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=<deprecated parameter>, edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)
其中,常用参数的说明如下:
给出一个简单的代码范例如下:
x = numpy.linspace(0, 6.28, 20)
y = numpy.sin(x)
plt.figure(figsize=(12, 7))
plt.scatter(x, y, marker="x", color="red")
plt.show()
更详细的说明可以参考官网:
这里,我们来考察以下pyplot中的曲线绘制函数plot的用法。
同样的,我们首先给出plot函数的定义如下:
matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)
给出一个简单的实现如下:
import numpy
import matlablib.pyplot as plt
x = numpy.linspace(0, 6.28, 20)
y = numpy.sin(x)
plt.figure(figsize=(12, 7))
plt.plot(x, y)
plt.show()
下面,我们给出plot函数的一些比较重要的参数说明如下:
更详细的函数说明可以参考官网文档:
这里,我们来考察图片的整体属性设置。
图片大小的设置在图片的创建过程中进行设置,命令为通过figsize参数的方式进行设置。
下面,我们给出代码示例如下;
x = numpy.linspace(0, 6.28, 20)
y = numpy.sin(x)
plt.figure(figsize=(12, 7)) # 创建图片并设置图片大小
plt.plot(x, y, marker="x", color="red")
plt.show()
我们可以通过axis函数来设置坐标轴的范围。
给出代码示例如下:
x = numpy.linspace(0, 6.28, 20)
y = numpy.sin(x)
plt.figure(figsize=(12, 7))
plt.plot(x, y, marker="x", color="red")
plt.axis([-2,8,-2,2])
plt.show()
通过axis函数即可设置x、y轴的显示范围。
更具体的函数说明可以参考官网说明:
通过grid函数,可以设置显示出坐标网格。
给出代码示例如下:
x = numpy.linspace(0, 6.28, 20)
y = numpy.sin(x)
plt.figure(figsize=(12, 7))
plt.plot(x, y, marker="x", color="red")
plt.axis([-2,8,-2,2])
plt.grid(True) # 显示坐标网格
plt.show()
更详细的函数说明可以参考官网链接:
这里,我们来考察一下如何绘制包含多条曲线的复杂图表。
在同一张图中绘制多条曲线的方式其实非常简单,只要不重置图片,那么绘制的图标就会一直在图表中叠加出现。
给出代码示例如下:
x = numpy.linspace(0, 6.28, 100)
y1 = numpy.sin(x)
y2 = numpy.cos(x)
plt.figure(figsize=(12, 7))
plt.plot(x, y1)
plt.plot(x, y2)
plt.grid(True)
plt.show()
如果要以多张子图的方式绘制图片,我们可以通过subplot命令进行实现。
给出代码示例如下:
x = numpy.linspace(0, 6.28, 100)
y1 = numpy.sin(x)
y2 = numpy.cos(x)
plt.figure(figsize=(12, 7))
plt.subplot(211)
plt.plot(x, y1)
plt.grid(True)
plt.subplot(212)
plt.plot(x, y2)
plt.grid(True)
plt.show()
其中,每一个subplot都是平权的,当绘制每一个子图时,把每一个子图都当成一个普通的图即可。
双坐标系也是实际的绘图中常出现的情形,因此,这里,我们来看一下双坐标系要如何进行处理。
给出代码示例如下:
x = numpy.linspace(0, 6.28, 100)
y1 = numpy.sin(x)
y2 = numpy.cos(x) + 3
fig, ax1 = plt.subplots(figsize=(12, 7))
ax2 = ax1.twinx()
ax1.plot(x, y1)
ax2.plot(x, y2)
plt.grid(True)
plt.show()
大图中绘制小图的情况也是文献中时常看到的一种图型。这里,我们来考察一下这部分内容的绘制。
给出实现的代码示例如下:
x = numpy.linspace(0, 6.28, 100)
y1 = numpy.sin(x)
y2 = numpy.cos(x)
fig = plt.figure(figsize=(12, 7))
plt.plot(x, y1)
ax2 = fig.add_axes([0.6, 0.6, 0.2, 0.2])
ax2.plot(x, y2)
plt.show()