def create_predict_pieseries(self, bots_part):
        human_part = 1 - bots_part
        percentage_bots_part = int(round(bots_part * 100))
        percentage_human_part = 100 - percentage_bots_part

        # define the series slices of the pie
        series = QPieSeries()
        bot_slice = QPieSlice(f"Bot ({percentage_bots_part}%)", bots_part)
        human_slice = QPieSlice(f"Human ({percentage_human_part}%)",
                                human_part)

        font = QFont()
        font.setBold(True)

        bot_slice.setColor(QColor("#3498db"))
        bot_slice.setLabelFont(font)
        human_slice.setColor(QColor("#a8e6cf"))
        human_slice.setLabelFont(font)

        series.append(bot_slice)
        series.append(human_slice)
        series.setLabelsVisible(False)
        series.setLabelsPosition(QPieSlice.LabelInsideHorizontal)
        series.setPieSize(0.94)

        return series
Пример #2
0
 def analyseProcess(self):
     absc = []
     ordo = []
     absc.clear()
     ordo.clear()
     for tabrow in range(self.tableWidget.rowCount()):
         abscitem = self.tableWidget.item(tabrow,
                                          self.comboBoxabsc.currentIndex())
         ordoitem = self.tableWidget.item(tabrow,
                                          self.comboBoxordo.currentIndex())
         absc.append(int(abscitem.text()))
         ordo.append(str(ordoitem.text()))
     df = pd.DataFrame({'data': absc})
     df.index = ordo
     df = df.sort_values(by='data', ascending=False)
     df["cumpercentage"] = df["data"].cumsum() / df["data"].sum() * 100
     self.figure.clear()
     plt.ion()
     ax = self.figure.add_subplot()
     ax.bar(df.index, df["data"], color="C0")
     ax2 = ax.twinx()
     ax2.plot(df.index, df["cumpercentage"], color="C1", marker="D", ms=7)
     ax2.yaxis.set_major_formatter(PercentFormatter())
     ax.tick_params(axis="y", colors="C0")
     ax2.tick_params(axis="y", colors="C1")
     self.canvas.draw()
     # donutchart***********************************
     self.m_donuts = []
     self.chartView3.setRenderHint(QPainter.Antialiasing)
     self.chart3 = self.chartView3.chart()
     self.chart3.legend().setVisible(True)
     self.chart3.setTitle("Nested donuts Chart")
     self.chart3.setAnimationOptions(QChart.AllAnimations)
     minSize3 = 0.1
     maxSize3 = 0.9
     donutCount3 = 5
     for i in range(donutCount3):
         donut = QPieSeries()
         sliceCount = random.randrange(3, 6)
         # print(sliceCount)
         for j in range(sliceCount):
             value3 = random.randrange(0, 50)
             slice_ = QPieSlice(str(value3), value3)
             slice_.setLabelVisible(True)
             slice_.setLabelColor(Qt.white)
             slice_.setLabelPosition(QPieSlice.LabelInsideTangential)
             slice_.hovered[bool].connect(
                 functools.partial(self.explodeSlice, slice_=slice_))
             donut.append(slice_)
             donut.setHoleSize(minSize3 + i *
                               (maxSize3 - minSize3) / donutCount3)
             donut.setPieSize(minSize3 + (i + 1) *
                              (maxSize3 - minSize3) / donutCount3)
         self.m_donuts.append(donut)
         self.chartView3.chart().addSeries(donut)
     self.updateTimer = QTimer(self)
     self.updateTimer.timeout.connect(self.updateRotation)
     self.updateTimer.start(1250)
     self.tabWidget.setCurrentIndex(2)
Пример #3
0
class pieChartView(QChartView):
    def __init__(self, *args, **kwargs):
        super(pieChartView, self).__init__(*args, **kwargs)
        self.initChart()
        self.refresh()

    def initChart(self):
        self._chart = QChart()
        # 调整边距
        self._chart.layout().setContentsMargins(0, 0, 0, 0)  # 外界
        self._chart.setMargins(QMargins(3, 0, 3, 0))  # 内界
        self._chart.setBackgroundRoundness(0)
        self._chart.setBackgroundVisible(False)
        # 设置主题
        self._chart.setTheme(QChart.ChartThemeBlueIcy)
        # 抗锯齿
        self.setRenderHint(QPainter.Antialiasing)
        # 开启动画效果
        self._chart.setAnimationOptions(QChart.SeriesAnimations)
        self._series = QPieSeries()
        self._series.setPieSize(0.8)
        self._chart.addSeries(self._series)
        self.setChart(self._chart)

    def refresh(self):
        # 提示widget
        self.toolTipWidget = GraphicsProxyWidget(self._chart)

    def mouseMoveEvent(self, event):
        super(pieChartView, self).mouseMoveEvent(event)
        pos = event.pos()
        x = pos.x()
        y = pos.y()
        # 得到在坐标系中的所有区域
        self.min_x, self.max_x = self._chart.geometry().width(
        ) * 0.2, self._chart.geometry().width() * 0.8
        self.min_y, self.max_y = self._chart.geometry().height(
        ) * 0.2, self._chart.geometry().height() * 0.9
        serie = self._chart.series()[0]
        slices = [(slice, slice.value()) for slice in serie.slices()]
        if self.min_x <= x <= self.max_x and self.min_y <= y <= self.max_y:
            t_width = self.toolTipWidget.width()
            t_height = self.toolTipWidget.height()
            title = "数据组成"
            # 如果鼠标位置离右侧的距离小于tip宽度
            x = pos.x() - t_width if self.width() - \
                                     pos.x() - 20 < t_width else pos.x()
            # 如果鼠标位置离底部的高度小于tip高度
            y = pos.y() - t_height if self.height() - \
                                      pos.y() - 20 < t_height else pos.y()
            self.toolTipWidget.show(title, slices, QPoint(x, y))
        else:
            self.toolTipWidget.hide()
Пример #4
0
class DonutBreakdownChart(QChart):
    def __init__(self, parent=None):
        super(DonutBreakdownChart, self).__init__(parent)

        self.mainSeries = QPieSeries()
        self.mainSeries.setPieSize(0.7)
        self.addSeries(self.mainSeries)

    def addBreakdownSeries(self, series, color):
        # Add breakdown series as a slice to center pie.
        slice = self.mainSeries.append(series.name(), series.sum())

        # Customize the slice.
        slice.setBrush(color)
        slice.setLabelVisible()
        slice.setLabelColor(Qt.white)
        slice.setLabelPosition(QPieSlice.LabelInsideHorizontal)

        # Position and customize the breakdown series.
        series.setPieSize(0.8)
        series.setHoleSize(0.7)
        series.setLabelsVisible()

        color = QColor(color)

        for slice in series.slices():
            color = color.lighter(115)
            slice.setBrush(color)
            slice.setLabelFont(QFont("Arial", 8))

        # Add the series to the chart.
        self.addSeries(series)

        # Recalculate breakdown donut segments.
        self.recalculateAngles()

    def recalculateAngles(self):
        angle = 0.0

        for slice in self.mainSeries.slices():
            series = self.find(slice.label())
            if series is not None:
                series.setPieStartAngle(angle)
                angle += slice.percentage() * 360.0
                series.setPieEndAngle(angle)

    def find(self, seriesName):
        for series in self.series():
            if isinstance(series, QPieSeries) and series.name() == seriesName:
                return series

        return None
Пример #5
0
 def getSeries(self):
     series = QPieSeries()
     slice0 = series.append('10%', 1)
     series.append('20%', 2)
     series.append('70%', 7)
     # 显示label文字
     series.setLabelsVisible()
     series.setPieSize(0.5)
     # 使第一块突出显示
     slice0.setLabelVisible()
     slice0.setExploded()
     # 设置第一块颜色
     slice0.setColor(QColor(255, 0, 0, 100))
     return series
    def create_initialize_pieseries(self):
        color = QColor("#757a79")
        # define the series slices of the pie
        series = QPieSeries()
        none_slice = QPieSlice("Undefined", 1.0)
        none_slice.setColor(color)
        none_slice.setBorderColor(color)

        series.append(none_slice)
        series.setLabelsVisible(False)
        series.setLabelsPosition(QPieSlice.LabelOutside)
        series.setPieSize(0.94)

        return series
Пример #7
0
    def get_pie_series(self):
        """
        TODO:订单管理界面点击统计调用该函数,计算订单管理界面当前搜索范围内所有订单 各大类 书的销售额
             按以下格式放入 series.append('类别x%', 销售额)
        """
        totals, classes = self.database.stat_2(*self.data)
        all_total = sum(totals)
        if all_total:
            series = QPieSeries()
            for i in range(len(totals)):
                if totals[i]:
                    word = (classes[i] + ' %.2f' % (totals[i]))
                    series.append(word, totals[i])
        else:
            series = QPieSeries()
            series.append('无销售', 1)
        series.setLabelsVisible()
        series.setPieSize(0.7)

        return series
Пример #8
0
    def createPieChart(self):
        chart = QChart()
        chart.setTitle("Pie chart")

        pieSize = 1.0 / len(self.m_dataTable)

        for i, data_list in enumerate(self.m_dataTable):
            series = QPieSeries(chart)
            for value, label in data_list:
                slice = series.append(label, value.y())
                if len(series) == 1:
                    slice.setLabelVisible()
                    slice.setExploded()

            hPos = (pieSize / 2) + (i / float(len(self.m_dataTable)))
            series.setPieSize(pieSize)
            series.setHorizontalPosition(hPos)
            series.setVerticalPosition(0.5)

            chart.addSeries(series)

        return chart
Пример #9
0
    def createPieChart(self):
        chart = QChart()
        chart.setTitle("Pie chart")

        pieSize = 1.0 / len(self.m_dataTable)

        for i, data_list in enumerate(self.m_dataTable):
            series = QPieSeries(chart)
            for value, label in data_list:
                slice = series.append(label, value.y())
                if len(series) == 1:
                    slice.setLabelVisible()
                    slice.setExploded()

            hPos = (pieSize / 2) + (i / float(len(self.m_dataTable)))
            series.setPieSize(pieSize)
            series.setHorizontalPosition(hPos)
            series.setVerticalPosition(0.5)

            chart.addSeries(series)

        return chart