【已解决】如何Python利用matplotlib绘制三维曲面图(可自由旋转的三维图)

1. 需求

在做电机的电磁设计时,需要对某一些参数进行优化,因此从电磁仿真软件Maxwell中导出了数据,部分数据如下图所示。
在这里插入图片描述
可是这样无法直观地看出参数的影响,因此将其调整为矩阵形式,如下图所示。
在这里插入图片描述
这样虽然已经能够比较直观地看出输入参数(电流和直径)对输出参数(转矩)的影响,可是不够美观,因此希望能够出一个三维图。

所以我们的需求就是,将上面的表格画成一个三维图展示出来。画三维图的话MATLAB或者Python都可以,由于这台电脑带不动MATLAB了,因此选择比较轻量且免费的Python来绘制。

2. 效果

在这里插入图片描述

3. 源代码

# -*- coding: utf-8 -*-
"""
Created on Wed Nov  4 11:50:31 2021

@author: 29235
"""

import matplotlib.pyplot as plt
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = Axes3D(fig)

X = np.array([40, 40.5, 41, 41.5, 42, 42.5, 43, 43.5, 44, 44.5, 45, 45.5, 46])
Y = np.array([73, 73.4, 73.8, 74.2, 74.6, 75])
X, Y = np.meshgrid(X, Y)

print("X维度信息",X.shape)
print("Y维度信息",Y.shape)

Z = np.array([[6.589055889,6.64902114,6.708506801,6.76873195,6.826929116,6.883863945,6.941234139,7.000980041,7.054255481,7.109803791,7.164581639,7.218312404,7.270706248
], 
             [6.791371118,6.852543525,6.913251843,6.973519432,7.033344309,7.092707208,7.151614187,7.210021177,7.267848299,7.324956649,7.381181255,7.436250947,7.489788889
], 
             [6.831692483,6.89286339,6.953606738,7.013941807,7.073861088,7.133397721,7.192511521,7.251186927,7.309458728,7.367340603,7.424484379,7.481372044,7.537841682
], 
             [7.086868085,7.149849934,7.212869543,7.275419973,7.337549343,7.399451263,7.461001477,7.522183123,7.582986224,7.643290063,7.703127756,7.762594775,7.821019196
], 
             [7.294926321,7.363130314,7.430014234,7.485656198,7.539103262,7.603323023,7.666993121,7.73028388,7.792974692,7.855100171,7.916647003,7.977528019,8.037752676
], 
             [7.694961389,7.766138728,7.83685522,7.907105954,7.976906299,8.046261641,8.114924107,8.183130388,8.250939779,8.318071108,8.384670594,8.450760983,8.516177871
], 
])

print("Z轴数据维度",Z.shape)

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')
ax.set_xlabel('I(A)', color='b')
ax.set_ylabel('D(mm)', color='g')
ax.set_zlabel('T(Nm)', color='r')

plt.draw()
plt.show()

这个代码我是在spyder中写的,因为用spyder运行代码时,生成的图片默认会使用spyder的Plots绘图,因此出来的图是静态图,没法旋转。
在这里插入图片描述
网上说用matplotlib自带的图片查看器是可以旋转查看三维图的,可是我没有在spyder中找到不用Plots绘图的方法。

因此想了个办法。

4. 特殊要求(可自由旋转)

打开命令行,将目录更改为绘图代码所在的目录。
在这里插入图片描述
激活环境。(因为我是用自建的环境来处理数据的,所以需要激活环境,如果你们用的是默认环境来绘图,就不需要这一步骤)
在这里插入图片描述
输入命令python I_D_T_Data_Process.py
在这里插入图片描述
即直接运行.py文件,这是就会调用matplotlib自带的图形显示器了。此时就可以自由地旋转这个三维图了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/mahoon411/article/details/121139438