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
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)
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()
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
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
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
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