pymatplotlib-2 绘制3D盒子
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def showbox(data):
fig = plt.figure("pymatplotlib-2 绘制3D盒子") # 绘图设置
ax = fig.gca(projection='3d') # 三维坐标轴
x, y, z = 0,0,0 #盒子坐标
dx, dy, dz = data #盒子长、宽、高
ax.bar3d(x, y, z, dx, dy, dz, color="green",zsort='average',edgecolor='white',linewidth=0.5,alpha=1)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
if __name__ == "__main__":
box = (1,2,3)
showbox(box)
效果图:
如果将透明图改成0,可以变成线条图,
ax.bar3d(x, y, z, dx, dy, dz, color="green",zsort='average',edgecolor='red',linewidth=0.5,alpha=0)
效果图:
在pyqt中使用pymatplotlib展示3D图形
import sys
from Ui_box3D0 import Ui_box3D
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from PyQt5.QtWidgets import QApplication,QMainWindow,QGridLayout
from matplotlib import pyplot as plt
class mwindow(QMainWindow,Ui_box3D):
def __init__(self):
super().__init__()
self.setupUi(self)
self.initUI()
self.showbox()
def initUI(self):
self.figure = plt.figure("pymatplotlib-2 绘制3D盒子") # 绘图设置
self.ax = self.figure.gca(projection='3d') # 三维坐标轴
self.canvas = FigureCanvas(self.figure) #增加画布
self.verticalLayout.addWidget(self.canvas) #将画布加入到groupBox中
def showbox(self):
self.ax.clear()
self.ax.bar3d(0,0,0,self.spinBox_4.value(),self.spinBox_5.value(),self.spinBox_6.value(), color="green",zsort='average',edgecolor='white',linewidth=0.5,alpha=1)
self.ax.bar3d(0,0,0,self.spinBox.value(),self.spinBox_2.value(),self.spinBox_3.value(), color="green",zsort='average',edgecolor='red',linewidth=0.5,alpha=0)
self.canvas.draw()
if __name__ == '__main__':
app = QApplication(sys.argv)
w = mwindow()
w.show()
sys.exit(app.exec_())
效果图: