【发布时间】:2021-05-31 17:39:37
【问题描述】:
在我的 pyqt5 中,我试图绘制圆环图,但我找不到我在这里做错的地方。当我绘制中心圆时它失败了。我使用了一个 Qtwidget 并转换为一个 mplwidget 类。我在同一个文件中添加了两个类MplCanvas 和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_())
【问题讨论】:
-
@eyllanesc 先生更新了我的帖子。第一次不允许我粘贴我的完整代码
标签: matplotlib pyqt5