利用Axes3D绘制三维性能曲面
简 介: 绘制二维函数的3D曲面图可以帮助我们更好理解函数内所蕴含的规律。Axes3D是matplotlib中的绘制函数。利用surface, countour,countourf等可以很好的显示函数3D内容。
关键词
: Axes3D,surface,contour,II
§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()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
2、测试结果
▲ 图1.1.1 绘制出的z三维函数
z.shape:(80, 80)
- 1
二、颜色参数
在 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
▲ 图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
- 3
- 4
- 5
▲ 图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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
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()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
▲ 图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 3}x_1^6 + x_1 x_2 - 4x_2^2 + 4x_2^2 + 2}} f=4x12−2.1x14+31x16+x1x2−4x22+4x22+210
x = arange(-4, 4, 0.1)
y = arange(-2, 2, 0.1)
x,y = meshgrid(x,y)
z = 10/(4*x**2 - 2.1*x**4 + x**6/3 + x*y - 4*y**2+4*y**4 + 2)
print(z.shape)
ax = Axes3D(plt.figure(figsize=(12,8)))
ax.plot_surface(x,y,z,
rstride=1,
cstride=1,
cmap=plt.cm.Blues)
plt.show()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
▲ 图2.2.1 绘制的3D图像
※ 总 结 ※
绘制二维函数的3D曲面图可以帮助我们更好理解函数内所蕴含的规律。Axes3D是matplotlib中的绘制函数。利用surface, countour,countourf等可以很好的显示函数3D内容。
■ 相关文献链接:
● 相关图表链接:
- 图1.1.1 绘制出的z三维函数
- 图1.2.1 colormap中的颜色
- 图1.2.2 改变颜色后的高度图
- 图2.1.1 搜索R1,R2的性能曲线
- 图2.1.2 搜索R1,R2性能曲线
- 图2.1.3 搜索R1,R2性能曲线
- 图2.1.4 R2对应的最大电压
- 图2.2.1 绘制的3D图像
文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。
原文链接:zhuoqing.blog.csdn.net/article/details/122283172
- 点赞
- 收藏
- 关注作者
评论(0)