Matplotlib 画布上的油炸圈饼图
在我的pyqt5中,我试图绘制油炸圈饼图,但我找不到我在这里犯的错误。绘制中心圆时失败。我使用了Qtwidget并将其转换为mplwidget类。我在同一个文件中添加了两个类Matplotlib 画布上的油炸圈饼图,matplotlib,pyqt5,Matplotlib,Pyqt5,在我的pyqt5中,我试图绘制油炸圈饼图,但我找不到我在这里犯的错误。绘制中心圆时失败。我使用了Qtwidget并将其转换为mplwidget类。我在同一个文件中添加了两个类mplnavas和MplWidget。 这是我的密码: from PyQt5 import QtCore, QtWidgets from PyQt5.QtWidgets import* from matplotlib.backends.backend_qt5agg import FigureCanvas import mat
mplnavas
和MplWidget
。
这是我的密码:
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import*
from matplotlib.backends.backend_qt5agg import FigureCanvas
import matplotlib.pyplot as plt
from matplotlib.backends.backend_qt5agg import FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg
from matplotlib.figure import Figure
class MplCanvas(FigureCanvasQTAgg):
def __init__(self, parent=None, width=5, height=4, dpi=100):
fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = fig.add_subplot(111)
self.ax1 = fig.subplots()
super(MplCanvas, self).__init__(fig)
class MplWidget(QWidget):
def __init__(self, parent = None):
QWidget.__init__(self, parent)
self.canvas = FigureCanvas(Figure())
vertical_layout = QVBoxLayout()
vertical_layout.addWidget(self.canvas)
self.canvas.axes = self.canvas.figure.add_subplot(111)
self.canvas.axes.set_position([0.03, 0.2,0.95, 0.7])
self.setLayout(vertical_layout)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.Mplwidget = MplWidget(self.centralwidget)
self.Mplwidget.setObjectName("Mplwidget")
self.verticalLayout.addWidget(self.Mplwidget)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
W=self.Mplwidget.canvas.axes
W.clear()
labels = ['a','b','c','d']
data =[40,10,30,20]
colors = ['#ff9999','#66b3ff','#99ff99','#ffcc99']
W.pie(data,colors = colors,labels=labels, autopct='%1.1f%%', startangle=90, pctdistance=0.85)
#draw circle
centre_circle = plt.Circle((0,0),0.70,fc='white')
fig = plt.gcf()
fig.gca().add_artist(centre_circle)
# Equal aspect ratio ensures that pie is drawn as a circle
W.axis('equal')
plt.tight_layout()
self.Mplwidget.canvas.draw()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
如果要在Qt中嵌入绘图,则不要使用pyplot,而是使用canvas: 导入系统 从PyQt5.qtwidts导入QApplication、QVBoxLayout、QWidget 从matplotlib.backends.backend_qt5agg导入图Canvasqtagg 从matplotlib.figure导入图形 从matplotlib.patches导入圆 类MplCanvas(图CANVASQTAGG): def u uu init uu uuuu(self,parent=None,width=5,height=4,dpi=100): 超级(MplCanvas,self)。\uuuuu初始化(图(figsize=(宽度,高度),dpi=dpi)) self.axes=self.figure.add_子批次(111) self.setParent(父级) 类MplWidget(QWidget): def uuu init uuu(self,parent=None): QWidget.\uuuuu init\uuuuuuu(自我,父) self.canvas=mplnavas() 标签=[“a”、“b”、“c”、“d”] 数据=[40,10,30,20] 颜色=[“#ff9999”、“#66b3ff”、“#99ff99”、“#ffcc99”] self.canvas.axes.pie( 数据, 颜色=颜色, 标签=标签, autopct=“%1.1f%%”, startangle=90, pctdistance=0.85, ) 中心圆=圆((0,0),0.70,fc=“白色”) self.canvas.axes.add_美工(中心圆) self.canvas.axes.axis(“相等”) self.canvas.figure.tight_布局() 垂直布局=QVBoxLayout(自) 垂直布局.addWidget(self.canvas) def main(): app=QApplication(sys.argv) widget=MplWidget() widget.show() sys.exit(app.exec_()) 如果名称=“\uuuuu main\uuuuuuuu”: main()
@eyllanesc sir更新了我的帖子。这是不允许我粘贴我的完整代码第一次我得到它,先生,非常感谢您先生的快速解决。