通过一个函数对比 mgrid以及meshgrid函数

简 介: 利用3D曲面显示可以更好的将三维函数性能可视化展示。利用view_init()设置不同的视角,动态显示曲面的不同方面。

关键词 meshgridmgridview_init

Axes3D函数曲面 文章目录 绘制Axes3D
函数曲面
利用mgrid产生x,y 利用meshgrid
产生xy
多角度的Axes3D contour3D 总结

 

§01 Axes3D函数曲面


1.1 绘制Axes3D函数曲面

1.1.1 利用mgrid产生x,y

import sys,os,math,time
sys.path.append("/home/aistudio/external-libraries")
import matplotlib.pyplot as plt
from numpy import *

from mpl_toolkits.mplot3d import Axes3D

def fxy(x,y):
    return 3*(1-x)**2*exp(-(x**2+(y+1)**2))+\
           10*(x/5-x**3-y**5)*exp(-(x**2+y**2))-\
           exp(-((x+1)**2+y**2))/3
grid_num = 100
x,y = mgrid[-4:4:grid_num*1j, -2:2:grid_num*1j]
xx = x.flatten()
yy = y.flatten()

ff = fxy(xx,yy).reshape(x.shape)

ax = Axes3D(plt.figure(figsize=(12,8)))
ax.plot_surface(x,y,ff,
                rstride=1,
                cstride=1,
                cmap=plt.cm.Blues)
plt.show()

通过一个函数对比 mgrid以及meshgrid函数

▲ 图1 mgrid产生的函数曲面

1.1.2 利用meshgrid产生xy

grid_num = 100
x = linspace(-4,4,grid_num)
y = linspace(-2,2,grid_num)
x,y = meshgrid(x,y)

通过一个函数对比 mgrid以及meshgrid函数

▲ 图1.1.2 mgrid产生的函数曲面

1.2 多角度的Axes3D

gifpath = '/home/aistudio/GIF'
if not os.path.isdir(gifpath):
    os.makedirs(gifpath)
gifdim = os.listdir(gifpath)
for f in gifdim:
    fn = os.path.join(gifpath, f)
    if os.path.isfile(fn):
        os.remove(fn)

xx = x.flatten()
yy = y.flatten()

ff = fxy(xx,yy).reshape(x.shape)

ax = Axes3D(plt.figure(figsize=(12,8)))
ax.plot_surface(x,y,ff,
                rstride=1,
                cstride=1,
                cmap=plt.cm.Blues)

count = 0
for i in range(0, 180, 10):
    ax.view_init(30,i)
    fn = os.path.join(gifpath, '%03d.jpg'%count)
    count += 1
    plt.savefig(fn)

通过一个函数对比 mgrid以及meshgrid函数

▲ 图 旋转GIF

通过一个函数对比 mgrid以及meshgrid函数
▲ 图 旋转GIF

通过一个函数对比 mgrid以及meshgrid函数
▲ 图 旋转GIF

1.3 contour3D

xx = x.flatten()
yy = y.flatten()

ff = fxy(xx,yy).reshape(x.shape)

ax = Axes3D(plt.figure(figsize=(12,8)))

ax = plt.axes(projection='3d')
ax.contour3D(x,y,ff, 100, cmap=plt.cm.hot)

count = 0
for i in tqdm(range(0, 350, 10)):
    ax.view_init(30, i)
    fn = os.path.join(gifpath, '%03d.jpg'%count)
    count += 1
    plt.savefig(fn)

通过一个函数对比 mgrid以及meshgrid函数

▲ 图 contour3D

通过一个函数对比 mgrid以及meshgrid函数
▲ 图 contour3D

通过一个函数对比 mgrid以及meshgrid函数
▲ 图 contour3D

ax.contour3D(x,y,ff, 100, cmap=plt.cm.hot)

通过一个函数对比 mgrid以及meshgrid函数

▲ 图 contour3D

 

结 ※


  用3D曲面显示可以更好的将三维函数性能可视化展示。利用view_init()设置不同的视角,动态显示曲面的不同方面。


● 相关图表链接:

上一篇:一次排除异常的经历


下一篇:【新星计划】MATLAB绘制图形