matplotlib是python的一个绘图库。使用它可以很方便的绘制出版质量级别的图形

基本绘图

  1. 绘制折线图
import numpy as np
import matplotlib.pyplot as mp

# xarray: <序列> 水平坐标序列
xarray = np.array{[1,2,3,4,5,6,7,8])
#yarray: <序列> 垂直坐标序列
yarray = np.array([6,17,3,41,36,1,53,12])
mp.plot(xarray,yarray)
mp.show()
  1. 绘制水平线和垂直线
import numpy as np
import matplotlib.pyplot as mp

# vertical 绘制垂直线::p.vlines(vval, ymin, ymax, ...)
#参数:vval:与x相交的值,ymin:水平线的最低点对应y轴上的值,ymax:水平线的最高点对应y轴的值
mp.vlines(30,2,7)
#绘制多条垂直线,第一个数组为vval,第二个数组为ymin,第三个数组为ymax
mp.vlines([2,3,4,5,6],
	[10,20,30,40],
	[40,50,60,70]
	)
	
# horizotal 绘制水平线:mp.hlines(xval, xmin, xmax, ...)
#参数:xval:与y相交的值,xmin:水平线的最低点对应x轴上的值,xmax:水平线的最高点对应x轴的值
mp.hlines(30,2,7)
#显示图表
mp.show()
  1. 绘制正弦曲线和余弦曲线
import numpy as np
import matplotlib.pyplot as mp

#从起始值到终止值按等比例拆1000个元素,所组成的一个数组
#x = np.linespace(起始点,结束点,中间有多少个连成这条曲线)
x = np.linespace(-np.pi,np.pi,1000)
#将数组中的每个元素拿出来求正弦函数值,封装成一个数组
sinx = np.sin(x)
cosx = np.cos(x)
mp.plot(x,sinx)
mp.plot(x,cosx)
mp.show()
  1. 线型、线宽、颜色
mp.plot(xarray, yarray, linestyle='', linewidth=1, color='', alpha=0.5)
#参数:
#linestyle:线型:'-' '--' '-.' ':'
#linewidth:线宽:英文颜色单词 或 常见颜色英文单词首字母或css设置颜色方式 或(1,1,1) 或(1,1,1,1)
#color:颜色
#alpha:透明度
  1. 设置坐标轴刻度
mp.xticks(x_val_list[,x_text_list])
#参数:x_val_list:x轴刻度值序列,x轴标签文本序列(刻度上显示的内容)
mp.yticks(y_val_list[,y_text_list])
#参数:y_val_lsit:y轴刻度值序列,y_text_list:y轴刻度标签文本序列

示例

import numpy as np
import matplotlib.pyplot as mp

x = np.linspace(-np.pi,np.pi,1000)	#设置起始点和终止点,由1000个点组成
sinx = np.sin(x)
cosx = np.cos(x)

mp.plot(x,sinx,linestyle='--',linewidth=2,color='dodgerblue',alpha=0.8)
mp.plot(x,cosx,linestyle='-.',linewidth=2,color='orangered',alpha=0.8)
mp.show()
#设置坐标轴刻度
vals = [-np.pi,-np.pi/2,0,np.pi/2,np.pi]
texts = [r'$-\pi$',r'$-\frac{\pi}{2}$','0',r'$-\frac{\pi}{2}$',r'$-\pi$']	#latex语法,依次表示:pi,pi/2 ,0,pi/2,pi
mp.xticks(vals,texts)
mp.show()
  1. 设置坐标轴
  1. 图形窗口设置
    mp.plot()默认会创建一个窗口
import matplotlib.pyplot as mp

#手动构建matplotlib窗口,可以构建多个窗口
mp.figure(
	'Figure A'	#窗口标题
	facecolor='gray')
mp.plot([1,2],[3,4])	#对第一个窗口进行绘制
#构建第二个
mp.figure('Figure B',facecolor='lightgray')
mp.plot([1,2],[4,3]) #对第二个窗口进行绘制

#重新调用Figure A窗口,把A窗口置为当前窗口
mp.figure('Figure A')

#设置当前窗口的参数
mp.title(title,fontsize=12)

mp.show()
  1. 设置当前窗口的参数
# 设置图表标题(和窗口标题区别开) 显示在图表上方
mp.title(title, fontsize=12)
# 设置水平轴的文本(水平轴的主体)
mp.xlabel(x_label_str, fontsize=12)
# 设置垂直轴的文本(垂直轴的主体)
mp.ylabel(y_label_str, fontsize=12)
# 设置刻度参数   labelsize设置刻度字体大小
mp.tick_params(..., labelsize=8, ...)
# 设置图表网格线  linestyle设置网格线的样式
# -  or solid 粗线
#   -- or dashed 虚线
#   -. or dashdot 点虚线
#   :  or dotted 点线
mp.grid(linestyle='')
# 设置紧凑布局(整理下窗口),把图表相关参数都显示在窗口中,窗口利用率提高
mp.tight_layout()
  1. 刻度定位器
    专门用于管理刻度显示
#获取当前坐标轴
ax = mp.gca()
#设置水平坐标轴的主刻度定位器
#参数:set_major_locator主刻度定位器
#mp.NullLocator:设置不显示主刻度定位器
#mp.MultipleLocator(1)设置主刻度显示为每隔1显示一次
ax.xaxis.set_major_locator(mp.NullLocator())

# 设置水平坐标轴的次刻度定位器为多点定位器,间隔0.1
#set_minor_locator:此刻度定位器(小刻度)
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))
  1. 子图(子窗口)
    矩阵式布局
    绘制矩阵式布局相关API
#手动构建一个matplotlib窗口
mp.figure('Subplot Layout',facecolor='lightgray')
#第一个参数为标题,第二个参数为表面颜色

#绘制子图
mp.subplot(rows,cols,num)
#参数:
#rows:将当前窗口拆成几行
#cols:将当前窗口拆成几列
#num:想画的是第几副图

案例:绘制9宫格矩阵式子图,每个子图中写一个数字

mp.figure('Subplot',facecolor='lightgray')
for i in range(9):
	mp.subplot(3,3,i+1)	#绘制3*3矩阵格式的子图窗口,每次迭代对第i+1个子图操作
	mp.text(
		0.5,0.5,i,	#在坐标位置(.5,.5)处(就是中点写i
		ha = 'center',	#水平居中
		va = 'center',	#垂直居中
		size = 36,	#i的大小
		alpha = 0.5,	#透明度
		)
	mp.xticks([])	#修改横坐标刻度显示为空
	mp.yticks([])	#修改横坐标刻度显示为空
	mp.tight_layout()
	mp.show()
  1. 图例
    在图表中某个位置显示出一个小框,用来显示每根图表线条(曲线)的含义
#绘制曲线时定义曲线的label,否则无法使用图例
mp.plot(xarray,yarray,label='xxx')

#显示图例
mp.legend(loc='')
#参数:
#loc设置图例的显示位置,默认位置为'best',也可以设置其他的
  1. 特殊点
    在图表中绘制出点
#绘制特殊点的API0
# xarray: <序列> 所有需要标注点的水平坐标组成的序列
# yarray: <序列> 所有需要标注点的垂直坐标组成的序列
mp.scatter(xarray, yarray, 
		marker='',	#点形,有'o''*''D''s'等
		s='',		#大小
		edgecolor='',	#边缘色
		facecolor='',	#填充色
		zorder=3,	#绘制图层编号(编号越大,图层越靠上)
		)

等高线图

组成等高线需要网格点坐标矩阵(用矩阵表示每个点的x,y,z),也需要每个点的高度。所以等高线属于3D数学模型范畴。

#绘制等高线的API
mp.contourf(x, y, z, 8, cmap='jet')
cntr = mp.contour(
	x,	#网格坐标矩阵的x坐标 (2维数组)
	y,	#网格坐标矩阵的y坐标 (2维数组)
	z,	#网格坐标矩阵的z坐标 (2维数组)
	8,	# 把等高线绘制成8部分
	colors='black',  # 等高线的颜色
	linewidths=0.5  # 线宽

案例:生成网格坐标矩阵,并且绘制等高线

n = 500
#生成网格化坐标矩阵
x, y = np.meshgrid(np.linspace(-3, 3, n),np.linspace(-3, 3, n))
#参数:
#第一个参数:给出x和y在x轴上的范围,n为生成x和y的数量
#第二个参数:给出x和y在y轴上的范围,n为生成x和y的数量

# 通过x与y,根据以下公式计算z(坐标高度)
z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)

#画图
#构造窗口
mp.figure('Contour',facecolor='lightgray')
mp.title('Contour', fontsize=20)+
#设置x,y轴标签文本名
mp.xlabel('x', fontsize=14)
mp.ylabel('y', fontsize=14)
#设置窗口的刻度的参数,labelsize设置刻度字体大小
mp.tick_params(labelsize=10)
#设置图标网格线 linestyle设置网格线的样式,:为点线
mp.grid(linestyle=':')
#绘制等高线图,参数8为等高线的数量
cntr = mp.contourf(x, y, z, 8, colors='black',linewidths=0.5)

# 为等高线图添加高度标签
mp.clabel(cntr, inline_spacing=1, fmt='%.1f',fontsize=10)
#参数:
#inline_spacing:高度标签文本两侧空格空间
#fmt:高度标签的输出数据格式

mp.show()

散点图

作用:当我们看到整个样本空间是怎样分布的时候,对接下来选择哪种模型是非常有帮助的
通过每个点的坐标、颜色、大小和形状表示不同的特征值(每一个点都是一个样本)
cmap颜色映射条
cmap=‘jet’:数越小越蓝,越大越红
绘制散点图相关API:

mp.sactter(
	x,		#x轴坐标数组
	y,		#y轴坐标数组
	marker='',	#点型
	s=10,    # 大小
	color='',   # 颜色
	edgecolor='',   # 边缘颜色
	facecolor='',  # 填充色
	zorder=''   # 图层序号
	)
散点图案例

用散点图呈现每个样本的身高、体重,颜色映射条使用jet

import numpy as np
import matplotlib.pyplot as mp

n = 200
#生成200个期望值为175,标准差为7的身高样本数据
x = np.random.normal(175,7,n)
#生成200个体重样本数据
y = np.random.normal(65,10,n)

#创建matplotlib窗口,名字为Pointchart 前景色为ligthgray
mp.figure('Points Chart',facecolor='lightgray')
#给出图表标题和字体大小
mp.title('Point Chart',fontsize=14)
mp.xlabel('Height',fontsize=14)
mp.ylabel('weight',fontsize=14)
mp.grid(linestyle=':')

#定义d数组,存储200个数字,以每个数字的大小去给每个样本点设置颜色,cmap='jet'时数越小越偏蓝,数越大越偏红
d = np.sqrt((x - 175)**2 + (y - 65)**2)

mp.scatter(x,y,marker='o',s=80,alpha=0.8,c=d,cmap='jet',label='Points')
#显示图例
mp.legend()
mp.show()

热成像图

本质:shape为:(xx,xx,1),1(页)表示热度(替代彩图中的3(rgb)),所以热成像图的shape可看作是二维列表(因为第三维就是1(想象是一页纸),和二维能存放的数据量是一样的)

每个像素点表示那个地方的温度(用红外线热成像仪采集)
颜色显示通过cmap参数显示

import numpy as np
import matplotlib.pyplot as mp

#API
mp.imshow(z,cmap='jet',origin='low')
#功能:把矩阵Z图形化
#参数:
#cmap:数值大小的颜色映射
#origin:坐标轴方向
#z:二维数组

3D图像绘制

from mpl_toolkits.mplot3d import axes3d
#使用axes3d提供的3d坐标系
#拿当前坐标系的时候给个参数projection='3d'
ax3d = mp.gca(projection='3d')	#class axes3d

matplotlib支持绘制三维点阵(三维散点图),三维曲面(3d平面图),三维线框图

ax3d.scatter(..)  # 绘制三维点阵
ax3d.plot_surface(..) # 绘制三维曲面
ax3d.plot_wireframe(..) # 绘制三维线框图
  1. 3d散点图的绘制API:
ax3d.scatter(
    x,     # x轴坐标数组
    y,    # y轴坐标数组
    z,    # z轴坐标数组
    marker='',   # 点型
    s=10,   # 大小
    zorder='',  # 图层序号
    color='',  # 颜色
    edgecolor='',  # 边缘颜色
    facecolor='', # 填充色 
    c=v,   # 颜色值 根据cmap映射应用相应颜色
    cmap=''   # 
    )

案例:绘制3d散点图

from mpl_toolkits.mplot3d import axes3d
import numpy as np
import matplotlib.pyplot s mp

#x,y,z轴分别生成正态分布的随机数,期望值为0,随机数相对0的标准差为1,随机数数量为300
n = 300
x = np.random.normal(0,1,n)	
y = np.random.normal(0,1,n)
z = np.random.normal(0,1,n)

#手动构建matplotlib窗口,窗口名为'3D Scatter',窗口颜色为lightgray
mp.figure('3D Scatter',facecolor='lightgray')
#创建3d坐标系
ax3d = mp.gca(projection='3d')

#设置坐标轴的标签文本名称
ax3d.set_xlabel('x',fontsize=14)
ax3d.set_ylabel('y',fontsize=14)
ax3d.set_zlabel('z',fontsize=14)

#绘制
ax3d.scatter(x,y,z,
	     marker='o',	#点型
	     s=100,	#大小
	     color='dodgerblue',
	     alpha=0.5
		)
#紧凑显示窗口图表		
mp.tight_layout()
#显示
mp.show()
  1. 3d平面图的绘制API
ax3d.plot_surface(
	x,		# 网格坐标矩阵的x坐标 (2维数组)
	y,		# 网格坐标矩阵的y坐标 (2维数组)
	z,		# 网格坐标矩阵的z坐标 (2维数组)
	rstride=30,	# 行跨距
	cstride=30,	# 列跨距
	camp='jet'	# 颜色映射,jet:数越小越偏蓝越大越红
	)

案例:绘制3d平面图

import numpy as np
import matplotlib.pyplot s mp
from mpl_toolkits.mplot3d import axes3d

#生成网格化坐标矩阵
#x在x轴上从-3~3拆n个点,在y轴上从-3~3拆n个点,y也一样
n = 500
x,y =np.meshgrid(np.linspace(-3,3,n),
		 np.linspace(-3,3,n))
#通过x与y(x与y合起来就是一个个网格点),通过下面的公式(举例子的,可替换)得到每个坐标点的高度z
z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)

#画图
#创建窗口
mp.figure('3D', facecolor='lightgray')
#创建3d坐标轴
ax3d = mp.gca(projection='3d')
#给出图表标题
mp.title('3D', fontsize=20)
#设置坐标轴的标签文本名
ax3d.set_xlabel('x', fontsize=14)
ax3d.set_ylabel('y', fontsize=14)
ax3d.set_zlabel('z', fontsize=14)
#设置坐标轴的刻度,labelsize设置大小
mp.tick_params(labelsize=10)

#绘制三d平面图
ax3d.plot_surface(x,y,z,rstride=30,cstride=30, cmap='jet')