matploylib是一种非常好用的绘图,建模工具。本文将延伸matploylib中的一些小应用。
利用animation进行动态绘图
利用mpl_toolkits.mplot3d进行3D绘图
大部分的动态绘图基于两个步骤
#!/usr/bin/env python
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
#首先创造背景和坐标
fig,ax = plt.subplots()
#x,y
x = np.linspace(-20,20,100)
y = np.linspace(-20,20,100)
X,Y = np.meshgrid(x,y)
#np.sin(X)是一个周期函数使图像不断重复更新,camp指颜色映射
img = plt.imshow(np.sin(X),cmap='hot')
nums = 1000 #需要的帧数
#图像初始化
def init():
ax.set_xlim(0, 100)
ax.set_ylim(0, 100)
return img
#图像更新
def update(step):
z = np.cos((0.5*X+np.cos(2*step))+step)+np.sin(0.5*(Y+np.sin(2*step))+step)
img.set_data(z) #设置新的 x,y
return img
'''
fig绘制动图的画布名称
update为自定义的动画更新
frames动画长度,一次循环包含的帧数,在函数运行时,其值会传递给函数update(step)
init_func自定义开始帧,即传入刚定义的函数init,初始化函数
interval更新频率,以ms计(越小越快)
'''
a = FuncAnimation(fig, update, frames=nums, #nums输入到frames后会使用range(nums)得到一系列step输入到update中去
init_func=init,interval=100)
plt.show()
matplotlib是一个专注于二维图形的绘图工具,但是matplotlib的一些工具包(toolkits,又叫扩展)
会有很多有趣且实用的功能。
如今比较流行的工具包有Basemap、GTK 工具、Excel工具、Natgrid、AxesGrid和mplot3d。
今天我们要介绍的mplot3d提供了一些基本的3D绘图功能(非常适合新手的3D绘图)
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签,适用于matplotlib
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
#制作3D模型第一步对3D模型的x,y,z进行定义
x, y = np.mgrid[-2:2:50j,-2:2:50j]
z = x*np.exp(-x**2-y**2)
'''X = np.arange(-4, 4, 0.5)
Y = np.arange(-4, 4, 0.5)
x,y = np.meshgrid(X, Y)
R = np.sqrt(x**2 + y**2)
z = np.sin(R)'''
#制作2D背景板
fig = plt.figure()
#将2D立体化成3D(两种方法)第一种方法可视性比较美观
ax = Axes3D(fig)
#ax = plt.subplot(111,projection='3d')
#进行3D建模(alpha指颜色填充度)
#cmap=plt.cm.coolwarm和cmap=plt.get_camp('rainbow')均可用
surf = ax.plot_surface(x,y,z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'),alpha=0.5)
#视图的投影(zdir指在 轴,offset指在 坐标上进行投影,camp指投影颜色)
ax.contour(x, y, z, zdir = 'x', offset = -2, cmap = plt.get_cmap('rainbow'))
ax.contour(x, y, z, zdir = 'y', offset = 2, cmap = plt.get_cmap('rainbow'))
ax.contour(x, y, z, zdir = 'z', offset = -0.4, cmap = plt.get_cmap('rainbow'))
#指颜色比对条(shrink,aspect控制长宽)
fig.colorbar(surf, shrink=0.5, aspect=10)
#注释
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.title('3D图')
plt.show()
mplot3d中最重要的一个函数就是plot_surface(),它的基本应用如下图
参数 | 描述 |
---|---|
X,Y,Z | 2D数组形式的数据值 |
rstride | 数组行距(步长大小) |
cstride | 数组列距(步长大小) |
color | 曲面块颜色 |
cmap | 曲面块颜色映射 |
facecolors | 单独曲面块表面颜色 |
norm | 将值映射为颜色的 Nonnalize实例 |
vmin | 映射的最小值 |
vmax | 映射的最大值 |
alpha | 颜色填充度 |
matplotlib.pyplot.colormaps色彩图cmap
https://blog.csdn.net/lly1122334/article/details/88535217
Numpy中Meshgrid函数介绍及2种应用场景
https://zhuanlan.zhihu.com/p/29663486
深入理解 Matplotlib 3D 绘图函数 plot_surface 的 rstride 和 cstride 参数
https://blog.csdn.net/ygdxt/article/details/86618606
动态绘图参考文章(很棒!)
https://blog.csdn.net/u014636245/article/details/90904151
本文为作者的学习记录,若有错误或不足望指正!
感谢!