matplotlib简介
matplotlib是Python的第三方工具包,顾名思义它是一个关于矩阵及绘图的开发包,里面丰富的函数以及类似MATLAB的函数可以让我们很快绘制一幅图像(Figure),无论是直线图,散点图,柱状图,直方图,等高线图等都可以轻松应对。
等高线的概念
首先来看一下等高线绘制的示意图,如Fig1所示
可以看到等高线实际上是一个三维图像的Z轴在二维X-Y平面上的投影,等高线的值等于图像在Z轴上的幅值,这就是等高线的本质含义。
电机效率MAP图
知道了等高线的含义,那么电机效率MAP就很好理解。电机效率MAP图的X轴可以理解为电机的转速,Y轴理解为电机扭矩,Z轴理解为电机的效 率。每一个转速和扭矩平面上的点都对应一个电机效率,通过等高线的绘制可以非常直观的了解电机的高效区对应的转速和扭矩区间,有助于新能源汽车行业动力总成测试工程师了解产品电机或者总成的性能。
contour和contourf函数
这两个函数是matplotlib工具包下pyplot库的API函数,其中contour是绘制等高线的轮廓的,contourf是填充等高线之间区域的函数(f即filled的意思,译为填充)。
首先导入三组数据,分别为电机转速x,电机扭矩y,电机效率z(二维矩阵),如Fig2所示。
准备工作,添加需要用到的第三方库
from matplotlib import pyplot as plt
import numpy as np
生成数据(这里为了代码简洁及演示直观,数据全部为手动输入)
x=np.arange(500,7000,500)
y=np.array([10 ,15 ,20 ,25 ,30 ,35 ,40 ,55 ,70 ,85 ,100 ,115 ,130 ,150])
zz=np.array([
[62,71,72,73.8,76.5,75,78,78,77,78,73.8,70,67],
[65,72.8,74.8,76.4,78,78.8,80.1,84,82,80,78,73.5,72.6],
[68,74.6,77.6,79,79.5,82.6,82.2,83,82.5,81.3,77,73,72.3],
[71,76.5,80.5,81.5,81,86.5,84.5,82,82.5,80,76.7,0,0],
[70.8,77,81,82,82,86,84.5,82,82,78,71.3,0,0],
[70.5,77.5,81.5,83,83,85.5,84,82,80,75,0,0,0],
[70,78,82,84,84.5,85.5,84,81.5,75.5,0,0,0,0],
[67,77,81,83.5,85,84,79.5,0,0,0,0,0,0],
[64,76,80,82.5,84,81,0,0,0,0,0,0,0],
[61,74,79,81.3,82,0,0,0,0,0,0,0,0],
[58,72,78,80,0,0,0,0,0,0,0,0,0],
[56,70,75.5,78.5,0,0,0,0,0,0,0,0,0],
[53,68.5,74,76,0,0,0,0,0,0,0,0,0],
[52,65,71.5,0,0,0,0,0,0,0,0,0,0]
])
网格化数据
xx,yy=np.meshgrid(x,y) # X,Y分别转换为一个二维数组
图像属性,标题,坐标名称
figure=plt.figure('contour',facecolor='lightgray')
plt.title('Motor Efficiency \n Presented by matplotlib', fontsize=12)
plt.xlabel('Speed', fontsize=12)
plt.ylabel('Torque', fontsize=12)
绘制等高线,colors和linewidths表示线条颜色及宽度,24代表等高线的个数
cntr=plt.contour(xx, yy, zz, 24, colors='black',linewidths=0.2)
等高线的属性,数值精度小数点后两位,字体大小为8
plt.clabel(cntr, fmt='%.2f', fontsize=8,manual=False)
填充等高线之间的区域,cmap表示渲染的颜色,alpha表示颜色透明度(1-不透明,0-全透明)
关于cmap更多的资料参考matplotlib官网
matplotlib_cmap
plt.contourf(xx, yy, zz, 24, cmap='jet',alpha=1)
显示color的柱状图
plt.colorbar()
最后将图像显示出来
plt.show()
结论
如下图Fig3所示,即为一个电机的效率MAP图
可以很明显的看到颜色越深代表电机的效率值越高,在这幅图中,该电机效率最高的区域为电机在3000rpm左右,扭矩在40N.m上下,那么我们可以认为电机工作在这段区域时,其性能可以达到最佳。
遗留问题
至此,我们利用matplotlib绘制了一幅电机的效率MAP图,但是程序在多个方面还有可以改进的空间
1)结合PyQt5来制作绘制图形的桌面应用程序,添加等高线功能。
2)通过Pandas模块读取xls或者csv数据,结合Numpy和Scipy计算出高效区域的占比。
3)二维矩阵zz具有插值功能。