matplotlib 放到 Gui中:
技术比较一般 代码比较简单 主要作为个人模块记录
操作
- 首先需要import两个重要的包
FigureCanvasQTAgg:
就是一个渲染器,渲染器的工作就是drawing,执行绘图的这个动作。渲染器是使物体显示在屏幕上
NavigationToolbar2QT(plot工具包)
from matplotlib.backends.backend_qt5agg import (FigureCanvasQTAgg , NavigationToolbar2QT as NT)
- 其次要做的是创建一个图像初始化的方法
def __initFigure(self):
self.__fig = mpl.Figure(figsize=(14, 11))
figCanvas = FigureCanvasQTAgg(self.__fig) # 绘图:QT(Figure)
nt = NT(figCanvas, self) # 把工具放到新绘制的QT(Figure)中
self.addToolBar(nt) # 进行添加操作
self.verticalLayout.addWidget(figCanvas)
self.ax3d = self.__fig.add_subplot(projection='3d')
self.ax3d.set_zlabel('Z', fontdict={'size': 15, 'color': 'red'})
self.ax3d.set_ylabel('Y', fontdict={'size': 15, 'color': 'red'})
self.ax3d.set_xlabel('X', fontdict={'size': 15, 'color': 'red'})
后面三行是我的程序中需要的大家不要在意 他的主要用途就是在self.__fig的子图中添加xyz轴 然后给与相应属性
我的目的是将plot嵌入到verticalLayout中去 所以有这么一段self.verticalLayout.addWidget(figCanvas)
- 最后就在主函数中引用方法就可以了
self.__initFigure()
坐标轴调整:
要对坐标轴进行调整,首先得清楚原理:
在matplotlib的pyplot模块中,许多函数都是对当前的Figure或Axes对象进行处理,比如说:plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图。其中,plt.gca()表示Get Current Axes。
(这里原文链接:https://blog.csdn.net/yue_csdn/article/details/110439628)
但是在我的代码中并不需要gca()函数 因为我的self.ax3d 就是三个坐标轴的实例
self.ax3d = self.__fig.add_subplot(projection=‘3d’)
- 我这里的坐标轴调整主要包括范围增加还有刻度调整
刻度调整需要from matplotlib.pyplot import MultipleLocator
还有这个语句self.ax3d.xaxis.set_major_locator(length)
self.ax3d = self.__fig.add_subplot(projection='3d')
self.ax3d.set_zlabel('Z', fontdict={'size': 15, 'color': 'red'})
self.ax3d.set_ylabel('Y', fontdict={'size': 15, 'color': 'red'})
self.ax3d.set_xlabel('X', fontdict={'size': 15, 'color': 'red'})
length = MultipleLocator(1)
ylength = MultipleLocator(1)
self.ax3d.set_xlim([-5, 5])
self.ax3d.set_ylim([-0, 11])
self.ax3d.set_zlim([-5, 5]) # 坐标轴的调整
self.ax3d.xaxis.set_major_locator(length)
self.ax3d.yaxis.set_major_locator(ylength)
self.ax3d.zaxis.set_major_locator(length)
这里我遇到了一个问题
当 self.ax3d.yaxis.set_major_locator(ylength) 这个语句的参数设置为length时就会出现这个样子
但是在我新增了一个一模一样的ylength后 就可以正常的显示所有刻度了
熟练掌握
提示:没有什么比多做多练更好的方法 来熟练掌握知识了