使用python畫3D線條


"""用於驗證整體趨勢正確性"""
#!python3
#-*- coding:utf-8 -*-
import matplotlib as mpl
import matplotlib.pyplot as plt
from pylab import *#中文顯示
from mpl_toolkits.mplot3d import Axes3D
import xlrd
"""----------------------------得到支撐數據---------------------------"""
mpl.rcParams['font.sans-serif'] = ['SimHei']#figure字體設定,正常顯示中文
mpl.rcParams['axes.unicode_minus']=False#figure符號設定,正常顯示負數
zhfont = matplotlib.font_manager.FontProperties(fname="C:\Windows\Fonts\simsun.ttc")#圖示字體設置


font = {
    "color":"b",
    "style":"oblique",
    "size":20,
    "weight":"bold"
    }
#data_t = []
data_x = []
data_y = []
data_z = []
data_1_x = []
data_1_y = []
data_1_z = []

#t_max = 0
#t_min = 0
x_max = 0
x_min = 0
y_max = 0
y_min = 0
z_max = 0
z_min = 0

x_1_max = 0
x_1_min = 0
y_1_max = 0
y_1_min = 0
z_1_max = 0
z_1_min = 0

data = xlrd.open_workbook("點集.xlsx")#打開excel
table = data.sheet_by_name("處理值")#獲取名稱為處理值的表
table_1 = data.sheet_by_name("理論值")#獲取名稱為理論值的表

nrows = table.nrows#獲取行數
ncols = table.ncols#獲取列數
nrows_1 = table_1.nrows#獲取行數
ncols_1 = table_1.ncols#獲取列數

for i in range(1,nrows):
    #data_t.append(table.cell(i,0).value)#逐行讀取第一列值,並存至data_t數組中
    data_x.append(table.cell(i,1).value)#逐行讀取第一列值,並存至data_t數組中
    data_y.append(table.cell(i,2).value)#逐行讀取第二列值,並存至data_y數組中
    data_z.append(table.cell(i,3).value)#逐行讀取第三列值,並存至data_z數組中

for i in range(1,nrows_1):
    #data_t.append(table.cell(i,0).value)#逐行讀取第一列值,並存至data_t數組中
    data_1_x.append(table_1.cell(i,1).value)#逐行讀取第一列值,並存至data_t數組中
    data_1_y.append(table_1.cell(i,2).value)#逐行讀取第二列值,並存至data_y數組中
    data_1_z.append(table_1.cell(i,3).value)#逐行讀取第三列值,並存至data_z數組中

#t_max = max(data_t)
#t_min = min(data_t)
x_max = max(data_x)
x_min = min(data_x)
y_max = max(data_y)
y_min = min(data_y)
z_max = max(data_z)
z_min = min(data_z)

x_1_max = max(data_1_x)
x_1_min = min(data_1_x)
y_1_max = max(data_1_y)
y_1_min = min(data_1_y)
z_1_max = max(data_1_z)
z_1_min = min(data_1_z)

def if_max(a,b):
    if a >= b:
        max = a
    else:
        max = b
    return max

def if_min(a,b):
    if a <= b:
        min = a
    else:
        min = b
    return min

xmax = if_max(x_max,x_1_max)
xmin = if_min(x_min,x_1_min)
ymax = if_max(y_max,y_1_max)
ymin = if_min(y_min,y_1_min)
zmax = if_max(z_max,z_1_max)
zmin = if_min(z_min,z_1_min)


"""----------------------------實際處理操作--------------------------"""

fig = plt.figure(figsize=(8,4))#創建繪制窗口
ax = fig.gca(projection = "3d")#3d坐標軸
ax.plot(data_x,data_y,data_z,"r-",label="處理曲線",linewidth=0.5)#處理曲線
ax.plot(data_1_x,data_1_y,data_1_z,"g-",label="理論曲線",linewidth=0.5)#理論曲線
ax.set_xlabel("X",fontdict = font)
ax.set_ylabel("Y",fontdict = font)
ax.set_zlabel("Z",fontdict = font)
ax.set_title("趨勢比對圖")
ax.set_xlim(xmin*0.9,xmax*1.1)
ax.set_ylim(ymin*0.9,ymax*1.1)
ax.set_zlim(zmin*0.9,zmax*1.1)
ax.legend(prop = zhfont)#圖示

plt.show()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM