使用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:WindowsFontssimsun.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()
原文地址:https://www.cnblogs.com/Gogo-ouchen/p/7999757.html