模块介绍
Matplotlib是一个Python 绘图库/工具包,可以生成各种2D、3D图形,让绘图成为简单容易的事情,使用matplotlib只需几行简单的代码就可以生成线形图、直方图、功率谱、条形图、误差图、散点图3D等。Matplotlib可以跨平台,可用于Python脚本,Python和IPython shell,Jupyter Notebook等。
Numpy是使用python进行科学计算的基础包,如N维数组,线性代数,随机数等功能。Matplotlib通常和numpy模块配合使用,将数据进行图形化展示。
使用基础
Matplotlib安装
Windows 系统安装 Matplotlib
进入到 cmd 窗口下,执行以下命令:
python -m pip install -U pip setuptools
python -m pip install matplotlib
Linux系统安装 Matplotlib
使用Linux包管理器进行安装:
sudo apt-get install python-matplotlib
在线安装:
Pip install matplotlib
IDE中直接安装
Mac系统安装 Matplotlib
使用pip命令进行安装:
sudo python –m pip install matplotlib
检查是否安装成功:
Pip list | grep matplotlib
创建画布介绍
使用figure()方法,设置画布长宽:
matplotlib.pyplot.figure(),常用参数:
num=None,
figsize=None,
dpi=None,
facecolor=None,
edgecolor=None,
frameon=True,
clear=False常用参数:分别为画布的宽(单位像素), 高, 背景颜色。
参数详解:
- Num:可选参数,可以将该num理解为窗口的属性id,即该窗口的身份标识。如果不提供该参数,则创建窗口的时候该参数会自增,如果提供的话则该窗口会以该num为Id存在。
- figsize:可选参数。整数元组(长值,宽值),画布长宽,默认是无。
- dpi:可选参数,整数。表示该窗口的分辨率。
- facecolor:可选参数,表示窗口的背景颜色。
- edgecolor:可选参数,表示窗口的边框颜色。
- frameon:可选参数,表示是否绘制窗口的图框,默认是
- clear:可选参数,默认是false,如果提供参数为ture,并且该窗口存在的话 则该窗口内容会被清除。
方法及属性
名称 | 说明 |
---|---|
Figure()方法 | 可以理解为获得一张画布,创建画布对象 |
Axes()方法 | 画布中的坐标轴对象,一个画布可以存在多个坐标轴 |
Text对象 | 代表文本对象 |
Gcf()方法 | 获得当前绘图的figure对象. Gca=get current figure |
Gca()方法 | 获得当前绘图的axes对象. Gca=get current axes |
Plot(x,y,color,marker,edgecolor) | 生成线形图,各种参数 |
Add_subplot(x,y,z)方法 | 在Figure对象上创建新的Axes对象,Figure可以包含多个Axes对象,这里的参数含义是,添加一个 |
axes.set_title属性 | 设置图形的标题; |
axes.set_xticks属性 | 设置X轴的刻度,其中minor=True参数表示设置更小的刻度; |
axes.set_yticks属性 | 设置Y轴的刻度 |
axes.set_xlabel属性 | 设置X轴的标签; |
axes.set_ylabel属性 | 设置X轴的标签; |
axes.grid属性 | 开启图形的刻度网格,其中minor=True参数表示显示小刻度的网格; |
axes.text属性 | 为图形添加文字,前两个参数表示添加的文字在坐标系中的位置; |
案例:线型图
import matplotlib.pyplot as plt #别名
import numpy as np #别名
fig1 = plt.figure() #创建画布对象
ax1 = fig1.add_subplot(1, 1, 1) #创建1行1列第一个axes对象
#randn函数返回一个或一组样本,具有标准正态分布。
#dn表格每个维度
#返回值为指定维度的array
x = np.random.randn(5) # 标准正太分布,生成随机数据
y = np.random.randn(5) #生成随机数据
#使用数据生成折线图
ax1.plot(x, y) #生成线性图
fig1.show() #显示图片
import matplotlib.pyplot as plt #别名
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig1 = plt.figure()
# ax1 = fig1.add_subplot(1, 1, 1)
ax1 = fig1.gca(projection="3d")
ax1.set_xlim([-1,1])
'''
randn函数返回一个或一组样本,。
dn表格每个维度
返回值为指定维度的array
'''
ax2 = fig1.add_subplot(2, 2, 1)
x = np.random.randn(5)
# [ 1.58042522 0.5129409 -0.67737106 -0.27264997 1.4350527 ]
y = np.random.randn(5)
ax1.plot(x,y,c='r')
ax1.scatter(x,y,c='r')
ax2.plot(x, y)
fig1.show()
案例:直方图
import matplotlib.pyplot as plt #别名
import numpy as np #别名
fig = plt.figure() #创建画布
plt.xlim([-150,150])
ax2 = fig.add_subplot(1, 1, 1) #创建唯一的axes对象
# np.random.seed(2)
data = np.random.normal(0,30,1000)#正太分布的拟合
bins = np.arange(-100, 100, 5)#从-100到100,步长为5,生成序列,左闭右开
ax2.hist(data, bins=bins)#使用hist函数,生成柱形图
fig.show()#显示画布中的图像
案例:散点图
import matplotlib.pyplot as plt #别名
import numpy as np #别名
# 创建伪随机数的生成器
rng = np.random.RandomState(0)
# 生成100个[0,1]之间均匀分布的随机数,
# [0.5488135 , 0.71518937, 0.60276338, 0.54488318,......]
x = rng.randn(100)
y = rng.randn(100)
colors = rng.randn(100)
sizes = rng.randn(100)*1000
plt.scatter(x,y,alpha=0.6,c=colors,s=sizes)
# 显示颜色条
plt.colorbar()
plt.show()
'''
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
x = np.arange(1,101)
y = 20+3*x+np.random.normal(0,60,100)
# marker='o','.',',','x','+','v','^','<','>','s','d'
ax.scatter(x,y,marker="<",c="k",alpha=0.5,s=100)
fig.show()
'''
案例:圆形图
import matplotlib.pyplot as plt #别名
import numpy as np
fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(1,1,1)
ax.spines['left'].set_color('none')
ax.spines['bottom'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.set_xticks([])
ax.set_yticks([])
# 实现功能 pi = 3.141592653589793
theta = np.arange(0,2* np.pi +0.1,2* np.pi /800)
x = np.cos(theta)
y = np.sin(theta)
v = np.linspace(0,10,80)
v.shape = (80,1)
x = v * x
y = v * y
plt.style.use('ggplot')
plt.plot(x, y,color = (0.75,0,0))
plt.show()
案例:3D图
步骤:
- 创建画布,axes对象
- 通过各种计算/函数获得数据
- 数据加工/参数设置
- 设置axes对象属性
- 输出/展示
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
fig = plt.figure(figsize=(16,12))
ax = fig.gca(projection="3d")
# 准备数据
x = np.arange(-5, 5, 0.25) #生成[-5,5]间隔/步长0.25的数列,间隔越小,曲面越平滑
y = np.arange(-5, 5, 0.25)
#格点矩阵,原来的x行向量向下复制len(y)次,形成len(y)*len(x)的矩阵,即为新的x矩阵;
# 原来的y列向量向右复制len(x)次,形成len(y)*len(x)的矩阵,即为新的y矩阵;新的x矩阵和新的y矩阵shape相同
x, y = np.meshgrid(x,y)
r = np.sqrt(x ** 2 + y ** 2)
z = np.sin(r)
surf = ax.plot_surface(x, y, z, cmap=cm.nipy_spectral) # cmap指 色表
# 自定义z轴
ax.set_zlim(-1, 1)
ax.zaxis.set_major_locator(LinearLocator(20)) # z轴网格线的疏密,刻度的疏密,20表示刻度的个数
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) # 将z的value字符串转为float,保留2位小数
#设置坐标轴的label和标题
ax.set_xlabel('x',size=30)
ax.set_ylabel('y',size=30)
ax.set_zlabel('z',size=30)
ax.set_title("Surface plot", weight='bold', size=40)
#显示右侧的色卡条
fig.colorbar(surf, shrink=0.6, aspect=15) # shrink表示整体收缩比例,aspect仅对bar的宽度有影响,aspect值越大,bar越窄
plt.show()
总结
Matplotlib图形组成结构:
使用matplotlib绘图流程:
1、创建绘图对象figure
2、创建画图区域或子图figure2(axes对象)
3、定义具体数据
4、数据处理(标题,坐标,网格等个性化显示)
5、使用数据绘图
6、输出/使用对象