matploylib的使用之动态绘图和3D绘图

文章目录

    • matploylib的使用之动态绘图和3D绘图
      • 1.动态绘图
      • 2.3D绘图

matploylib的使用之动态绘图和3D绘图

matploylib是一种非常好用的绘图,建模工具。本文将延伸matploylib中的一些小应用。

利用animation进行动态绘图

利用mpl_toolkits.mplot3d进行3D绘图

1.动态绘图

大部分的动态绘图基于两个步骤

  • 图像的初始化

  • 图像的更新
    matploylib的使用之动态绘图和3D绘图_第1张图片

#!/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()

matploylib的使用之动态绘图和3D绘图_第2张图片

2.3D绘图

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 颜色填充度

我绘制两幅效果图,大家可以按照自己的方式脑洞大开
matploylib的使用之动态绘图和3D绘图_第3张图片
matploylib的使用之动态绘图和3D绘图_第4张图片

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

本文为作者的学习记录,若有错误或不足望指正!
感谢!

你可能感兴趣的:(matploylib的使用之动态绘图和3D绘图)