【问题标题】:QPieChart Legend and Percentage LabelQPieChart 图例和百分比标签
【发布时间】:2020-11-28 03:11:36
【问题描述】:

是否可以在 QPieChart 中将百分比显示为圆圈上的标签和图例中的字符串?

这是我的示例代码

from PyQt5 import QtCore, QtGui, QtWidgets, QtChart
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
from PyQt5.QtChart import QChart, QChartView, QPieSeries, QPieSlice
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtCore import Qt

class Window(QMainWindow):
    def __init__(self):
        super().__init__()
 
        self.setWindowTitle("PyQtChart Pie Chart")
        self.setGeometry(100,100, 1280,600)
 
        self.show()
        self.create_piechart()

    def create_piechart(self):
        series = QtChart.QPieSeries()
        series.append("Python", 80)
        series.append("C++", 70)
        series.append("Java", 50)
        series.append("C#", 40)
        series.append("PHP", 30)
        series.setLabelsVisible(True)
        series.setLabelsPosition(QtChart.QPieSlice.LabelOutside)
        for slice in series.slices():
            slice.setLabel("{:.2f}%".format(100 * slice.percentage()))
 
        chart = QChart()
        chart.legend()
        chart.addSeries(series)
        chart.createDefaultAxes()
        chart.setAnimationOptions(QChart.SeriesAnimations)
        chart.setTitle("Pie Chart Example")
 
        chart.legend().setVisible(True)
        chart.legend().setAlignment(Qt.AlignBottom)
        chartview = QChartView(chart)
        chartview.setRenderHint(QPainter.Antialiasing)
 
        self.setCentralWidget(chartview) 
App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec_())

【问题讨论】:

    标签: python pyqt pyqt5 qtcharts pyqtchart


    【解决方案1】:

    为了在饼图上显示百分比,您需要更改 QPieSeries

    将标签位置从
    series.setLabelsPosition(QtChart.QPieSlice.LabelOutside) 更改为series.setLabelsPosition(QtChart.QPieSlice.LabelInsideHorizontal)

    之后,图例标签也是百分比。要更改图例标签,请修改图例标记

    chart.legend().markers(series)[0].setLabel("Python")
    chart.legend().markers(series)[1].setLabel("C++")
    chart.legend().markers(series)[2].setLabel("Java")
    chart.legend().markers(series)[3].setLabel("C#")
    chart.legend().markers(series)[4].setLabel("PHP")
    

    结果:

    链接到documentation

    完整代码

    from PyQt5 import QtChart
    from PyQt5.QtWidgets import QApplication, QMainWindow
    import sys
    from PyQt5.QtChart import QChart, QChartView
    from PyQt5.QtGui import QPainter
    from PyQt5.QtCore import Qt
    
    
    class Window(QMainWindow):
        def __init__(self):
            super().__init__()
    
            self.setWindowTitle("PyQtChart Pie Chart")
            self.setGeometry(100, 100, 1280, 600)
    
            self.show()
            self.create_piechart()
    
        def create_piechart(self):
            series = QtChart.QPieSeries()
            series.append("Python", 80)
            series.append("C++", 70)
            series.append("Java", 50)
            series.append("C#", 40)
            series.append("PHP", 30)
            series.setLabelsVisible(True)
    
        
            series.setLabelsPosition(QtChart.QPieSlice.LabelInsideHorizontal)
            for slice in series.slices():
                slice.setLabel("{:.2f}%".format(100 * slice.percentage()))
    
            chart = QChart()
            chart.addSeries(series)
            chart.createDefaultAxes()
            chart.setAnimationOptions(QChart.SeriesAnimations)
            chart.setTitle("Pie Chart Example")
            chart.legend().setVisible(True)
            chart.legend().setAlignment(Qt.AlignBottom)
    
            chart.legend().markers(series)[0].setLabel("Python")
            chart.legend().markers(series)[1].setLabel("C++")
            chart.legend().markers(series)[2].setLabel("Java")
            chart.legend().markers(series)[3].setLabel("C#")
            chart.legend().markers(series)[4].setLabel("PHP")
    
            chartview = QChartView(chart)
            chartview.setRenderHint(QPainter.Antialiasing)
    
            self.setCentralWidget(chartview)
    
    
    if __name__ == '__main__':
        App = QApplication(sys.argv)
        window = Window()
        sys.exit(App.exec_())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多