网上python都是抄袭的范例,没有一个是根据3个一位数组来实现等组图的,实在无语!经大量的学习国外例子才终于实现了该功能,其实不难,难的是我们的工程师们没有挖掘学习的习惯。现在贡献出来,供和我一样迷茫的小白学习共勉!
本实例数据来源MINITAB,可以形成对比:
时间和品质关系图,来自MINTAB:
表格 温度
数据:
代码如下:
PYTHON 实现:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata
#plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
data=pd.read_excel('C:\TEMP\SAMPLE.xlsx',sheet_name='Sheet1',usecols=['TEMP','TIME','QUA'],header=2)
x=data.iloc[:,0]
y=data.iloc[:,1]
z=data.iloc[:,2]
xi=np.linspace(min(x),max(x))
yi=np.linspace(min(y),max(y))
xi,yi=np.meshgrid(xi,yi)
zi=griddata(data.iloc[:,0:2],z,(xi,yi),method='cubic')
#三维立体图
fig=plt.figure()
ax = fig.add_subplot(projection='3d')
#ax=fig.gca(projection='3d')---错误表达
surf=ax.plot_surface(xi,yi,zi,cmap='BuPu',linewidth=0,antialiased=False)
fig.colorbar(surf)
ax.set_title('Qua-Time-Temp')
plt.show()
#-----------三维立体图图一-----------------------------------
#--------等高线图=-------
levels=np.linspace(np.min(z),np.max(z),30)
fig1,ax1=plt.subplots(figsize=(8,6))
cs=ax1.contour(xi,yi,zi,levels=levels)
ax1.clabel(cs,inline=True,fontsize=6)
ax1.set_title('等高线图')
plt.show()
#---等高线色彩----
x=np.array(x) #--x类型要改变才可以使用TRI的函数
y=np.array(y) #--y类型要改变
z=np.array(z) #--z类型要改变
triang = tri.Triangulation(x, y)
triang.set_mask(np.hypot(x[triang.triangles].mean(axis = 1),
y[triang.triangles].mean(axis = 1))
< min_radius)
fig2, ax2 = plt.subplots()
#ax1.set_aspect('equal')----会导致图片变形
tcf = ax2.tricontourf(triang, z)
fig2.colorbar(tcf)
ax2.tricontour(triang, z, colors ='k')
fig2.suptitle('matplotlib.pyplot.tricontour() Example')
plt.show()
#=======END========================
以下是实现的图片及MINITAB对比图:
和MINITAB基本一致
等高线图=
和MINITAB相比,精度更高一些。
等高线色彩图,和MINITAB基本一致:
至此程序实现了基本要求