如何在 python qt designer 或 pyqt5 中添加 matplotlib 3d pyplot
how to add the matplotlib 3d pyplot in python qt designer or pyqt5
我的问题很简单但是找不到答案,大家可以帮帮我吗?
请
问题在python GUI pyqt5,我想用matplotlib
绘制3d轴,我找到函数matplotlib.pyplot,mpl_toolkits.mplot3d可以做得好,但是pyqt5只能使用函数matplotlib.figure和matplotlib.backends。backend_qt5agg。
然后:
在我的概念中,matplotlib.backends。backend_qt5agg只能用二维轴绘制,不能旋转。
如何将 3d pyplot 轴放在 pyqt5 上?
我的例子是:
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
def spRDM_frame(self):
fig = Figure()
# note spRDM_Widget is the widget object on qt designer.
self.ui.spRDM_Widget.canvas = FigureCanvas(fig)
self.ui.spRDM_Widget.canvas.axes = self.ui.spRDM_Widget.canvas.figure.add_subplot(1,1,1, projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X ** 2 + Y ** 2)
Z = np.sin(R)
self.ui.spRDM_Widget.canvas.axes.plot(X,Y,Z)
self.ui.spRDM_Widget.canvas.draw()
示例中的,不是我想要的
如何更改 pyplot 和 pyqt5 上的设置。
非常感谢大家。
可以使用 Figure
容器在 FigureCanvasQTAgg
canvas 上绘制 3D 轴。您的代码的一个问题是 axes3d.plot
期望 x、y 和 z 坐标的一维数组作为输入参数,但您提供的是二维数组。要使此代码正常工作,您需要使用 axes3d.plot_surface
或 axes3D.plot_wireframe
之类的东西,例如
from PyQt5 import QtWidgets
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
import numpy as np
class Widget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.fig = Figure()
self.canvas = FigureCanvas(self.fig)
self.axes = self.fig.add_subplot(111, projection='3d')
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.canvas)
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X ** 2 + Y ** 2)
Z = np.sin(R)
self.axes.plot_surface(X, Y, Z)
if __name__ == "__main__":
app = QtWidgets.QApplication([])
win = Widget()
win.show()
app.exec()
我的问题很简单但是找不到答案,大家可以帮帮我吗?
请
问题在python GUI pyqt5,我想用matplotlib
绘制3d轴,我找到函数matplotlib.pyplot,mpl_toolkits.mplot3d可以做得好,但是pyqt5只能使用函数matplotlib.figure和matplotlib.backends。backend_qt5agg。
然后:
在我的概念中,matplotlib.backends。backend_qt5agg只能用二维轴绘制,不能旋转。
如何将 3d pyplot 轴放在 pyqt5 上?
我的例子是:
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
def spRDM_frame(self):
fig = Figure()
# note spRDM_Widget is the widget object on qt designer.
self.ui.spRDM_Widget.canvas = FigureCanvas(fig)
self.ui.spRDM_Widget.canvas.axes = self.ui.spRDM_Widget.canvas.figure.add_subplot(1,1,1, projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X ** 2 + Y ** 2)
Z = np.sin(R)
self.ui.spRDM_Widget.canvas.axes.plot(X,Y,Z)
self.ui.spRDM_Widget.canvas.draw()
示例中的,不是我想要的
如何更改 pyplot 和 pyqt5 上的设置。
非常感谢大家。
可以使用 Figure
容器在 FigureCanvasQTAgg
canvas 上绘制 3D 轴。您的代码的一个问题是 axes3d.plot
期望 x、y 和 z 坐标的一维数组作为输入参数,但您提供的是二维数组。要使此代码正常工作,您需要使用 axes3d.plot_surface
或 axes3D.plot_wireframe
之类的东西,例如
from PyQt5 import QtWidgets
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
import numpy as np
class Widget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.fig = Figure()
self.canvas = FigureCanvas(self.fig)
self.axes = self.fig.add_subplot(111, projection='3d')
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.canvas)
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X ** 2 + Y ** 2)
Z = np.sin(R)
self.axes.plot_surface(X, Y, Z)
if __name__ == "__main__":
app = QtWidgets.QApplication([])
win = Widget()
win.show()
app.exec()