Круговая диаграмма Matplotlib - Как центрировать этикетку? - PullRequest
0 голосов
/ 25 августа 2018

enter image description here

Я добавил повернутые метки на круговую диаграмму и ожидал, что по умолчанию метки будут центрированы в каждом срезе круговой диаграммы. Но это не так

Как я могу отцентрировать свои метки?

Вот мой бэкэнд-код:

from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget
from frontend import Ui_MainWindow
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
import matplotlib.pyplot as plt

class Ui_MainWindow(QMainWindow, Ui_MainWindow):

    def __init__(self, parent=None):
        super(Ui_MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.graph = MyCanvas()      
        self.gridLayout.addWidget(self.graph, 0, 0, 1, 1)
        self.graph.figure.clf()
        self.axes = self.graph.figure.add_subplot(111)
        self.y = [1,2,3, 4,8,16,32]
        self.label = ['1.52%', '3.03%', '4.55%', '6.06%', '12.12%', '24.24%', '48.48%']
        self.axes.pie(self.y, labels=self.label, labeldistance=0.6, rotatelabels =True)

class MyCanvas(FigureCanvas):
    def __init__(self, *args, **kwargs):
        self.figure = plt.figure()
        FigureCanvas.__init__(self, self.figure)
        self.figure.patch.set_facecolor("None")
        self.figure.subplots_adjust(left=0.08, bottom=0.10, right=0.99, top=0.97)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    prog = Ui_MainWindow()
    prog.show()
    sys.exit(app.exec_())

1 Ответ

0 голосов
/ 26 августа 2018

Глядя на документацию , вы можете передавать выделенные параметры текстовым объектам в круговой диаграмме, используя ключевое слово textprops.textprops принимает dict, который, очевидно, принимает все параметры, которые принимаются matplotlib.text.Text .Подавая его, параметры rotation_mode='anchor', va='center' и ha='left' дают довольно хорошие результаты:

import matplotlib.pyplot as plt

figure = plt.figure()
figure.patch.set_facecolor("None")
figure.subplots_adjust(left=0.08, bottom=0.10, right=0.99, top=0.97)
figure.clf()
axes = figure.add_subplot(111)
axes.set_aspect(1)
y = [1,2,3, 4,8,16,32]
label = ['1.52%', '3.03%', '4.55%', '6.06%', '12.12%', '24.24%', '48.48%']
axes.pie(
    y, labels=label, labeldistance=0.6, rotatelabels =True,
    textprops = dict(rotation_mode = 'anchor', va='center', ha='left'),
)

plt.show()

Результат кода выглядит следующим образом:

result of above code

Обратите внимание, что я добавил ax.set_aspect(1), чтобы сделать круговую диаграмму круглой.Если вы этого не хотите, просто пропустите эту строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...