Matplotlib 是一个数据可视化工具包,是一个 python 的 2D绘图库,通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
安装方法:pip install matplotlib
引用方法:from matplotlib import pyplot as plt
绘图函数:plt.plot()
显示图像:plt.show()
plot 函数 绘制点和线图
- 线型linestyle: (-, -. , --, ..)
- 点型marker: (v, ^, s, *, H,+,x,D,o,...)
- 颜色color: (b,g,r,y,k,w....) 可使用简写也可使用全称
- label: 当前绘制的线的名称
- linewidth: line的宽度
plot 函数设置图片相关属性
- 设置图像标题: plt.title()
- 设置X轴名称: plt.xlabel()
- 设置Y轴名称: plt.ylabel()
- 设置X轴范围: plt.xlim()
- 设置Y轴范围: plt.ylim()
- 设置X轴刻度: plt.xticks()
- 设置Y轴刻度: plt.yticks()
- 设置图例: plt.legend()
- 指定轴的视口: plt.axis(xmin, xmax, ymin, ymax)
示例1 简单运用
plt.plot([1,2,3,4], [5,3,7,9], 'o-r', label='Line A')
plt.plot([2,3,4, 5], [4,5,8,10], linestyle='-.', marker='*', color='b', label='Line b')
plt.title('Matplotlib Test') # 设置
plt.xlabel('Xlabel')
plt.ylabel('Ylabel')
plt.xlim(0,5)
plt.ylim(0, 10)
plt.legend()
plt.show()
示例2 绘制数学函数图像
- y=x
- y=x^2
- y = sin(x)
# x = np.linspace(-100, 100, 10000)
x = np.arange(0, 3 * np.pi, 0.1)
y1 = x
y2 = 2*x+1
y3 = np.sin(x)
plt.plot(x, y1, color='red', label='y=x')
plt.plot(x, y2, color='blue', label='y=x^2')
plt.plot(x, y3, color='yellow', label='y=sin(x)')
plt.legend()
plt.xlabel('Xlabel')
plt.ylabel('Ylabel')
plt.show()
plt.pie(x=[10, 20, 30, 40], colors=['r','y','b','g'], labels = ['A','B','C','D'],explode = (0,0,0.1,0))
plt.axis('equal') # 保证饼图为圆
plt.show()
Matplotlib 画布
画布:figure对象
- fig = plt.figure()
- 常用参数:
- num:如果未提供,将创建一个新的figure,并且figure编号递增。figure对象将该数字保存在number 属性中。如果提供了num,并且已经存在具有此ID的figure,则将其激活,并返回对其的引用。如果该figure不存在,将创建它并返回它.
- figsize: (float,float),可选,默认:无
宽度,高度(以英寸为单位)。如果未提供,则默认为 [6.4, 4.8]
在画布上面添加子图
- ax = fig.add_subplot(2,2,1)
调整子图间距
subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
有六个可选参数来控制子图布局。值均为0~1之间。其中left、bottom、right、top围成的区域就是子图的区域。wspace、hspace分别表示子图之间左右、上下的间距-
left, right, bottom, top:子图所在区域的边界。
当值大于1.0的时候子图会超出figure的边界从而显示不全;值不大于1.0的时候,子图会自动分布在一个矩形区域(下图灰色部分)
要保证left < right, bottom < top,否则会报错。
-
wspace, hspace:子图之间的横向和纵向间距。
无论如何所有子图都不会超出left, right, top, bottom所围区域。子图的长宽比不变,而是按比例缩小,所以调整横向间距也可能影响纵向间距,反之亦然。
示例
fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax1.plot([1,2,3,4], [5,3,7,9], color='red')
ax2.plot([2,3,4, 5], [4,5,8,10], color='blue')
ax3.plot([3,6,4, 5], [7,6,9,8], color='black')
fig.subplots_adjust(
top = 0.98, bottom = 0.07, right = 0.98, left = 0.08, hspace = 0.3, wspace = 0.3)
# fig.show()
plt.show()
也可以写成下面这
fig = plt.figure()
ax1 = plt.subplot(2,2,1)
ax2 = plt.subplot(2,2,2)
ax3 = plt.subplot(2,2,3)
ax1.plot([1,2,3,4], [5,3,7,9], color='red')
ax2.plot([2,3,4, 5], [4,5,8,10], color='blue')
ax3.plot([3,6,4, 5], [7,6,9,8], color='black')
fig.subplots_adjust(
top = 0.98, bottom = 0.07, right = 0.98, left = 0.08, hspace = 0.3, wspace = 0.3)
# fig.show()
plt.show()
使用 plt.subplots() 创建一个图和一组子图。
可以使用单个功能来创建一个图形,该图形具有仅一行代码的多个子图,例如,下面的代码将返回既是fig图形对象又axes是2x3的轴对象数组,这使您可以轻松访问每个子图
fig, axes = plt.subplots(nrows=2, ncols=3)
相反,matplotlib.pyplot.subplot()在指定的网格位置仅创建单个子图轴。这意味着将需要多行代码来实现与matplot.pyplot.subplots()在上述单行代码中所做的相同的结果:
# first you have to make the figure
fig = plt.figure(1)
# now you have to create each subplot individually
ax1 = plt.subplot(231)
ax2 = plt.subplot(232)
ax3 = plt.subplot(233)
ax4 = plt.subplot(234)
ax5 = plt.subplot(235)
ax6 = plt.subplot(236)
fig, axes = plt.subplots(23):即表示一次性在figure上创建成23的网格,使用plt.subplot()只能一个一个的添加[引用来源]:*
使用关键字字符串绘图
在某些情况下,您可以使用允许您使用字符串访问特定变量的格式的数据
Matplotlib允许您使用data关键字参数提供此类对象。如果提供,那么您可以生成包含与这些变量对应的字符串的图。
data = {'a': np.arange(50),
'c': np.random.randint(0, 50, 50),
'd': np.random.randn(50)}
data['b'] = data['a'] + 10 * np.random.randn(50)
data['d'] = np.abs(data['d']) * 100
plt.scatter('a', 'b', c='c', s='d', data=data) # 散点图
plt.xlabel('entry a')
plt.ylabel('entry b')
plt.show()
使用多个图形和轴
def f(t):
return np.exp(-t) * np.cos(2*np.pi*t)
t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)
plt.figure(1)
plt.subplot(211)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')
plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
plt.show()
这里的 figure() 命令是可选的,因为默认情况下将创建 figure(1)
,就像默认情况下创建 subplot(111)
一样,如果不手动指定任何轴。subplot()命令指定numrows
, numcols
, plot_number
,其中 plot_number
的范围 从1到numrows*numcols
。如果 numrows * numcols <10
,则subplot命令中的逗号是可选的。因此 subplot(211)
与 subplot(2, 1, 1)
相同。