利用Axes3D绘制三维性能曲面

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用Axes3D绘制三维性能曲面相关的知识,希望对你有一定的参考价值。

简 介: 绘制二维函数的3D曲面图可以帮助我们更好理解函数内所蕴含的规律。Axes3D是matplotlib中的绘制函数。利用surface, countour,countourf等可以很好的显示函数3D内容。

关键词 Axes3DsurfacecontourII

绘制曲面
文章目录
绘制举例
测试代码
测试结果
颜色参数
颜色名称
改变颜色
更多举例
电阻组合
搜索代码
搜索结果
切片到一维
二维非线性函数
总 结

 

§01 制曲面


  多时候需要绘制三维曲面,比如绘制二维函数取值,优化问题在二维上的切片投影等。通过 绘制分类界面以及性能曲面中的meshgrid函数 或者二维的格点,经过计算可以通过surface, contour等函数绘制三维曲面和等高线。

一、绘制举例

1、测试代码

from headm import *                 #

from mpl_toolkits.mplot3d import Axes3D

x = arange(-4, 4, 0.1)
y = arange(-4, 4, 0.1)
x,y = meshgrid(x, y)
r = sqrt(x**2+y**2)
z = sin(r)

printt(z.shape\\)

ax = Axes3D(plt.figure(figsize=(12,8)))
ax.plot_surface(x,y,z,rstride=1, cstride=2, cmap=plt.cm.hot)
ax.contour(x,y,z,
           zdir='z',
           offset=-2,
           cmap=plt.cm.hot)

ax.set_zlim(-2,2)
plt.show()

2、测试结果

▲ 图1.1.1 绘制出的z三维函数

z.shape:(80, 80)

二、颜色参数

Python可视化|matplotlib07-自带颜色条Colormap(三) 给出了 cmap的各种组合。

1、颜色名称

['Accent', 'Blues', 'BrBG', 'BuGn', 'BuPu', 'CMRmap', 'Dark2', 'GnBu', 'Greens', 'Greys', 'OrRd', 'Oranges', 'PRGn', 'Paired', 'Pastel1', 'Pastel2', 'PiYG', 'PuBu', 'PuBuGn', 'PuOr', 'PuRd', 'Purples', 'RdBu', 'RdGy', 'RdPu', 'RdYlBu', 'RdYlGn', 'Reds', 'Set1', 'Set2', 'Set3', 'Spectral', 'Wistia', 'YlGn', 'YlGnBu', 'YlOrBr', 'YlOrRd', 'afmhot', 'autumn', 'binary', 'bone', 'brg', 'bwr', 'cividis', 'cool', 'coolwarm', 'copper', 'cubehelix', 'flag', 'gist_earth', 'gist_gray', 'gist_heat', 'gist_ncar', 'gist_stern', 'gist_yarg', 'gnuplot', 'gnuplot2', 'gray', 'hot', 'hsv', 'inferno', 'jet', 'magma', 'nipy_spectral', 'ocean', 'pink', 'plasma', 'prism', 'rainbow', 'seismic', 'spring', 'summer', 'tab10', 'tab20', 'tab20b', 'tab20c', 'terrain', 'twilight', 'twilight_shifted', 'viridis', 'winter']

▲ 图1.2.1 colormap中的颜色

2、改变颜色

ax.plot_surface(x,y,z,rstride=1, cstride=2, cmap=plt.cm.Blues)
ax.contourf(x,y,z,
           zdir='z',
           offset=-2,
           cmap=plt.cm.BuGn)

▲ 图1.2.2 改变颜色后的高度图

 

§02 多举例


一、电阻组合

  在 通过一个端口读取多个按钮 搜索了多个电阻并联开关的时候,对应的最大电压间隔。可以看到其中峰值非常复杂。下面对于两个电阻组合进行搜索,绘制性能曲面。

1、搜索代码

R0                     = 1e3
U0                     = 3.3
def minVoltage(r1,r2):
    rdim = [10e10, r1, r2,
            1/(1/r1 + 1/r2)]
    vdim = sorted([r/(r+R0)*U0 for r in rdim])
    vdiff = [b-a for a,b in zip(vdim[:-1], vdim[1:])]
    vdiff.append(vdim[0])

    return min(vdiff)

STEP_NUM        = 50
x = arange(100, 10000, STEP_NUM)
y = arange(100, 10000, STEP_NUM)
x,y = meshgrid(x, y)

z = array([minVoltage(x,y) for x,y in zip(x.flatten(), y.flatten())]).reshape(x.shape)

2、搜索结果

(1)搜索范围:100:10000:50

▲ 图2.1.1 搜索R1,R2的性能曲线

(2)搜索范围:500:3000:10

▲ 图2.1.2 搜索R1,R2性能曲线

(3)搜索范围:500:4000:10

▲ 图2.1.3 搜索R1,R2性能曲线

3、切片到一维

R1 = 4e3
R2 = linspace(0, 10000, 10000)
z = [minVoltage(R1, r2) for r2 in R2]
plt.clf()
plt.figure(figsize=(12,8))
plt.plot(R2, z)
plt.xlabel("R2")
plt.ylabel("Z")
plt.grid(True)
plt.tight_layout()

▲ 图2.1.4 R2对应的最大电压

二、二维非线性函数

f = 10 4 x 1 2 − 2.1 x 1 4 + 1 3 x 1 6 + x 1 x 2 − 4 x 2 2 + 4 x 2 2 + 2 f = 10 \\over 4x_1^2 - 2.1x_1^4 + 1 \\over 3x_1^6 + x_1 x_2 - 4x_2^2 + 4x_2^2 + 2 f=4x122.1x14+31

以上是关于利用Axes3D绘制三维性能曲面的主要内容,如果未能解决你的问题,请参考以下文章

python 绘制三维图形、三维数据散点图

绘制三维图

matlab 用surf绘制出的曲面上颜色代表的含义

matlab三维阴影曲面绘图函数surfsurfcfurflmatlab图行绘制六

matlab三维阴影曲面绘图函数surfsurfcfurflmatlab图行绘制六

MATLAB学习——三维曲面图像绘制