python 关于matplotlib

matplotlib简介

Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。

Matplotlib 可以用来绘制各种静态,动态,交互式的图表。

Matplotlib 是一个非常强大的 Python 画图工具,我们可以使用该工具将很多数据通过图表的形式更直观的呈现出来。

Matplotlib 可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等。

Matplotlib 通常与 NumPy 和 SciPy(Scientific Python)一起使用, 这种组合广泛用于替代
MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。

Matplotlib Pyplot

Pyplot 是 Matplotlib 的子库,提供了和 MATLAB 类似的绘图 API

https://www.runoob.com/matplotlib/matplotlib-subplots.html

plt.figure()

有两个功能:1.创建一个画图对象。2.使这个函数返回的画图对象成为当前活跃的,并且在show()的时候该画处于最上层。
figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
num:图像编号或名称,数字为编号 ,字符串为名称;
figsize:指定figure的宽和高,单位为英寸;
dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80(1英寸等于2.5cm);
facecolor:背景颜色;
frameon:是否显示边框。

figure()会使得最新调出来的那个窗口处于活跃状态,之后如果plot,都会在这个窗口上。
plt.figure() : 创建新窗口,新窗口编号按照之前窗口的序号继续。
plt.figure(2) : 如果编号为2的窗口已经存在,则现在编号2的从窗口处于活跃状态(在所有窗口里面最靠前,置于顶层)。

fig = plt.figure(num=1, figsize=(6, 5), facecolor='b', edgecolor='r', frameon=True)
plt.show()

fig.add_subplot()方法

先使用fig=plt.figure()定义画布fig
fig.add_subplot()用来定义副画布
参数是一个三位数,比如fig.add_subplot(211),第一位表示上下分几块,第二位表示左右分几块,第三位表示该副画布的编号。

a=plt.figure()
a1=a.add_subplot(211) 
a2=a.add_subplot(212)

plt.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=None, edgecolors=None, hold=None, data=None,**kwargs)
参数作用如下:x, y位置。s大小。c颜色。marker形状。 norm:数据亮度,默认为no,范围为0-1,float数据。
vmin,vmax:亮度设置,默认为no,若norm实例已使用,该参数无效。alpha透明度,范围为0-1。linewidths:描边的宽度。edgecolors:描边颜色。markeredgewidth描边粗细
c颜色可以是:单一颜色,颜色序列,使用cmap映射到颜色的序列数,一个行为RGB的2-D数组
s大小的默认值是20,下面第一幅图这么大;s=1是下面第二幅图

python matplotlib库 python matplotlib库作用_matplotlib

python matplotlib库 python matplotlib库作用_子图_02

fig = plt.figure(); fig.clf()

清除当前图形。

t = np.linspace(0.0, 2.0, 201)
s = np.sin(2 * np.pi * t)

plt.ylabel('y-axis')
plt.xlabel('x-axis')
plt.plot(t, s)
plt.grid(True)
plt.show()
plt.clf()

plt.title('matplotlib.pyplot.clf Example')
plt.show()

清除前:

python matplotlib库 python matplotlib库作用_python_03


清除后:

python matplotlib库 python matplotlib库作用_python_04

fig = plt.figure(1, facecolor=‘white’)

plt.subplot(111, frameon=False)

单独设置坐标轴对象

坐标轴对象可以直接设置xlim,ylim,title,xlabel,ylabel。
还可以直接画图,ax.plot(), ax.scatter(),ax.grid(),ax.legend()
注意:figure对象是不可以直接画图的。即,fig没有以上方法。

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.set(xlim=[-1, 1], ylim=[-1, 1], title='简单示例',
       ylabel='Y-Axis', xlabel='X-Axis')

网格线

matplotlib.pyplot.grid(b=None, which='major', axis='both', **kwargs)。

b:是否显示网格线。布尔值或None,可选参数。如果没有关键字参数,则b为True,如果b为None且没有关键字参数,相当于切换网格线的可见性。
which:网格线显示的尺度。字符串,可选参数,取值范围为{‘major’, ‘minor’, ‘both’},默认为’both’。'major’为主刻度、‘minor’为次刻度。
axis:选择网格线显示的轴。字符串,可选参数,取值范围为{‘both’, ‘x’, ‘y’},默认为’both’`。
**kwargs:Line2D线条对象属性。

每次plot可以设置标签label属性

l1,=plt.plot(x,y1,label='y1=2*x+1',linestyle='--')  #设置函数标签和函数线的类型
l2,=plt.plot(x,y2,label='y2=x**2')

图例legend()

matplotlib.pyplot.legend(*args, **kwargs)

设置legend图例的方式有两种:

  1. 如果在画图时设置了标签属性label,直接使用plt.legend()就会显示图例,图例内容就是label。
  2. 还可以在legend()方法中设置属性labels=[ , …, ],这样即使前面画图时设置了label,也还是按照这里设置的labels属性设置图例内容。

ax.set_xscale(‘log’)设置坐标刻度为log间距

从图上看,可以理解为越靠左(越小,越接近0)的地方坐标被 “ 张开 ” 了;越靠右(越大)的地方坐标被 “挤压” 了。

python matplotlib库 python matplotlib库作用_python matplotlib库_05

设置坐标轴从大到小(翻转)

ax.set_xlim(ax.get_xlim()[::-1])

解释:ax.get_xlim()返回二元组,就是坐标轴的范围(xmin.xmax)
ax.get_xlim()[::-1]将二元组倒序,[::-1]这种索引格式是将列表倒序。

ax = ply.gca()直接创建坐标轴对象

cmap

link

plt.contour()

1.画等高线。2.画决策边界。
1.下面的例子画一个抛物面的等高线。

x = np.arange(-5, 5, 1)
y = np.arange(-5, 5, 1)
xx, yy = np.meshgrid(x, y)
# 先看看meshgrid代表的是那些点
plt.scatter(xx, yy, s=10)

python matplotlib库 python matplotlib库作用_python_06

z = xx ** 2 + 2 * yy ** 2  # z是关于x,y变量的二元函数,是抛物面
plt.contour(xx, yy, z)  # 画出这个抛物面函数的等高线,自然是一个个椭圆嵌套
plt.axis('square')
plt.show()

python matplotlib库 python matplotlib库作用_开发语言_07


2.画一个抛物线的决策边界。

x = np.arange(-5, 6, 0.2)
y = np.arange(-1, 6, 0.2)
xx, yy = np.meshgrid(x, y)
z = yy > xx ** 2  # z的形状和x,y一致,元素是bool值,False和True的边界实际上就是决策边界
print(z)
plt.scatter(xx, yy, s=1)
plt.contour(x, y, z)
plt.show()

python matplotlib库 python matplotlib库作用_开发语言_08

plt.contourf()

plt.contour()的filled版本

把上面的plt.contour()直接改成plt.contourf()

python matplotlib库 python matplotlib库作用_matplotlib_09

tile()和suptitle()

如果用了subplot, 则tile()是画当前子图的标题。
suptitle()是画整个大图的标题。

tight_layout(pad=1.08, h_pad=None, w_pad=None, rect=None)

  • pad:表示画布边缘与子图边缘之间的空白区域的大小,默认为1.08。
  • h_pad, w_pad:表示相邻子图之间的空白区域的大小。
  • rect:表示调整所有子图位置的矩形区域的四元组(left,bottom,right,top),默认为(0,0,1,1)。

plt.show()

用于展示所有的图像。
注意:展示图像时程序会暂停执行。可以考虑使用savefig(‘文件路径’)解决这个问题。
注意:如果在plt.show()之后savefig()的话,保存的是一张白图,因为show()之后会创建一个新的空白窗口。

pt.savefig(“文件路径”)

直方图hist()

plt.hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, *, data=None, **kwargs)

x: 作直方图所要用的数据,必须是一维数组;多维数组可以先进行扁平化再作图;必选参数;
bins: 直方图的柱数,即要分的组数,默认为10;

scatter画空心的marker

设置color=’ ', edgecolors=color

plt.subplots()和plt.subplot()

subplot(1,3,1)需要每次画子图前声明一下是哪张子图。比如左边就是画第一张

subplots():

fig, axes = plt.subplots(1, 2)

注意括号里只需要两个参数,返回的是fig,和所有的axes。要画子图需要索引第几个子图:

ax[0].plot()

感觉不是特别常用。

plt.gray()

使用matplotlib库pyplot模块中的gray()函数将colormap设置为“gray”。

plt.matshow()

matplotlib.pyplot.matshow()函数用于在新的图形窗口中将数组表示为矩阵。左上角被设置为原点,行(数组的第一个维度)以水平形式显示。图形窗口的长宽比根据数组进行设置,避免了较短、较窄的图形。x轴的Tick标签放置在顶部。

plt.imshow()

plt.fill_between()

plt.fill_between用颜色填充两条曲线之间的区域
plt.fill_between(x, y1, y2),其中x是横坐标,y1和y2是两条曲线,这个函数的作用是用颜色填充y1和y2这两条曲线之间的区域。