Matplotlib 高级绘图功能 – 今日知识点如下:
- 散点图 扩充知识点
- 填充图
1.散点图
散点图颜色映射的使用
# d为大于0的整数,这样计算越靠近中心的样本
# d的值越小,越靠近外周的样本d的值越大
d = (x-172)**2-(y-65)**2
mp.scatter(x,y,marker='o',
s=50,
c = d,
cmap='gist_earth',
alpha=0.5,
zorder=3,
label='Student')
散点效果图:
2.填充图
以某种颜色自动填充两条曲线的闭合区域
mp.fill_between(
x,sin_x,cos_x, # 通过这三个参数,给出两条曲线
sin_x<cosx, # 填充条件,若为True时填充
color = '',
alpha=0.5
)
案例:绘制两条曲线:sin(x) cos(x/2)/2 [0,8π]
'''
绘制填充
'''
import matplotlib.pyplot as mp
import numpy as np
n = 1000
x = np.linspace(0,8*np.pi,n)
sinx = np.sin(x)
cosx = np.cos(x/2)/2
mp.figure('Fill',facecolor='lightgray')
mp.title('Fill',fontsize=18)
mp.xlabel('x',fontsize=12)
mp.ylabel('y',fontsize=12)
mp.tick_params(labelsize=12)
mp.grid(linestyle=":")
mp.plot(x,sinx,c='dodgerblue',label=r'$y=sin(x)')
mp.plot(x,cosx,c='orangered',label=r'$y=\frac{1}{2}cos(\frac{x}{2})$')
mp.fill_between(x,sinx,cosx,
sinx<cosx,
color='dodgerblue',
alpha=0.8
)
mp.legend()
mp.show()
填充效果图:
3. 绘制3D图像
使用matplotlib绘制3D图像,需要先获取3D坐标轴,调用ax3d对象的方法绘制3D图像
from mpl_toolkits.mplot3d import axes3d
ax3d = mp.gca(projection='3d')
- 3D线框图
ax3d.plot_writeframe(
x,y,z, # 网格点坐标矩阵,和每个点的z轴值
rstride=30, # 行跨距
cstride=30, # 列跨距
linewidth=1, # 线宽
color='' # 颜色
案例:
import numpy as np
import matplotlib.pyplot as mp
from mpl_toolkits.mplot3d import axes3d
n = 1000
# 获取网格点坐标矩阵数组
x, y = np.meshgrid(np.linspace(-3, 3, n),
np.linspace(-3, 3, n))
# 通过x与y计算每个坐标点的高度(编的)
z = (1 - x / 2 + x**5 + y**3) * \
np.exp(-x**2 - y**2)
# 绘制
mp.figure('WireFrame', facecolor='lightgray')
ax = mp.gca(projection='3d')
ax.set_xlabel('x',fontsize=14)
ax.set_ylabel('y',fontsize=14)
ax.set_zlabel('z',fontsize=14)
ax.plot_wireframe(x,y,z,
rstride=30,
cstride=30,
color='dodgerblue',
linewidth=1
)
mp.show()
效果图:
- 3D曲面图
ax3d.plot_surface(
x,y,z,
rstride=30,
cstride=30,
cmp='jet'
)
代码跟3D线框图相似,直接上效果图:
- 3D散点图
ax3d.scatter(
x,y,z, # 样本点的(x,y,z)坐标数组
marker='o', # 点型
s = 10, # 点的大小
zorder='',
color='',
edgecolor='',
facecolor='', # 背景颜色
c = d, # 颜色值数组
cmap='' # 所使用的颜色映射
)
案例:
'''
3D散点图绘制
'''
import numpy as np
import matplotlib.pyplot as mp
from mpl_toolkits.mplot3d import axes3d
n = 100
x = np.random.normal(0,1,n)
y = np.random.normal(0,1,n)
z = np.random.normal(0,1,n)
d = x**2 + y**2 + z**2
mp.figure('3D scatter')
ax = mp.gca(projection='3d')
ax.scatter(x,y,z,
s = 60,
alpha = 0.5,
c=d,
cmap='jet'
)
mp.show()
效果图如下:
4. 绘制 极坐标系
某些情况下极坐标系适合显示与角度有关的图像,例如雷达。它可以处理极径ρ与极角θ之间的线性关系。
mp.gca(projection='polar') # 使坐标轴变成极坐标系
r = 0.8 * t
案例:
import numpy as np
import matplotlib.pyplot as mp
t = np.linspace(0,4*np.pi,1000)
r = 0.8 * t
mp.figure('Polor')
mp.gca(projection='polar')
mp.plot(t,r)
mp.show()
效果图:
5. 简单动画
动画即是在一段时间内快速连续从新绘制图像的过程
matplotlib提供了方法可以实现简单动画,定义一个update函数用于即时更新图像。
import matplotlib.animation as ma
# update中编写更新图像的代码,每隔一段时间将会自动调用
def update(number):
pass
# 每隔30毫秒,针对当前窗体绘制图像
anim = ma.FuncAnimation(mp.gcf(),update,interval=30)
mp.show()