def addSeries(self, key): self.chart.removeAllSeries() self.series = QPieSeries() print(self.series) self.series.setHoleSize(0.35) print('chart',key) if len(sampleData[key]) == 2: for key, value in sampleData[key].items(): #print("adding series", str(key), value) slice_ = QPieSlice(str(key), value) self.series.append(slice_) self.chart.addSeries(self.series) #self.frame.frame.hide() #self.frame.frame.removeWidget(self.table) self.frame.frame.hide() self.chart.show() else: print('hi') self.table = TableView(data, 5, 4) if self.frame.ly.count() == 0: self.frame.ly.addWidget(self.table) self.frame.frame.show() self.chart.hide() #print(frame) print('parent', self.parent())
def input_changed(self, txt): if self.serie in self.chart.series(): self.chart.removeSeries(self.serie) self.serie = QPieSeries() for inp in self.inputs: self.serie.append(inp.name.text(), int(inp.value.text())) self.chart.addSeries(self.serie)
def chart(self): self.pieseries = QPieSeries() # 定义PieSeries self.pieseries.append("正常程序", 0.1) # 插入第一个元素 self.pieseries.append("恶意程序", 0.9) self.slice = self.pieseries.slices()[0] # 得到饼图的某一个元素切片,在这取得为第一个 #self.slice.setExploded() # 设置为exploded self.slice.setLabelVisible() # 设置Lable self.slice.setPen(QPen(Qt.darkGreen, 1)) # 设置画笔类型 self.slice.setBrush(Qt.green) # 设置笔刷 self.slice1 = self.pieseries.slices()[1] # 得到饼图的某一个元素切片,在这取得为第一个 self.slice1.setExploded() # 设置为exploded self.slice1.setLabelVisible() # 设置Lable self.slice1.setPen(QPen(Qt.darkRed, 1)) # 设置画笔类型 self.slice1.setBrush(Qt.red) # 设置笔刷 self.chart = QChart() # 定义QChart self.chart.addSeries(self.pieseries) # 将 pieseries添加到chart里 self.chart.setTitle("恶意程序预测结果饼状图") # 设置char的标题 self.chart.legend().hide() # 将char的legend设置为隐藏 self.charview = QChartView( self.chart, self.left_down_widget ) # 定义charView窗口,添加chart元素,设置主窗口为父窗体,既将chartView嵌入到父窗体 self.charview.setGeometry(0, 0, 800, 500) # 设置charview在父窗口的大小、位置 self.charview.setRenderHint(QPainter.Antialiasing) # 设置抗锯齿 self.charview.show() # 将CharView窗口显示出来
def create_piechart(self): today = datetime.date.today() Day = selectday(today) catogeries = Day['allCategory'] catogeries = dict(sorted(catogeries.items(), key=lambda x: -x[1])[:5]) print(f"--------------------{catogeries}--------") series = QPieSeries() tot_val = 0 for name, value in catogeries.items(): tot_val += value tot_val = max(tot_val, 1) for name, value in catogeries.items(): if value == 0: value = 0.2 _slice = series.append(name, 100 * (value / tot_val)) _slice.setLabelVisible(True) # can be removed if unnecessary self.chart = QChart() self.chart.legend().hide() self.chart.addSeries(series) self.chart.createDefaultAxes() self.chart.setAnimationOptions(QChart.SeriesAnimations) self.chart.setTitle("Categories") self.chart.legend().setVisible(True) self.chart.legend().setAlignment(Qt.AlignBottom) self.chartview = QChartView(self.chart) self.chartview.setRenderHint(QPainter.Antialiasing)
def process(self): ''' Processes Summary and Chart Data ''' self.summary = { 'AtkCount': self.data.loc['IsAtk'].value_counts() [1], # count number of 1s in the column 'IP': self.data.loc['IP'].value_counts().to_dict(), 'Protocol': self.data.loc['Protocol'].value_counts().to_dict(), 'Port': self.data.loc['Port'].value_counts(), 'Atk': self.data.loc['Atk'].value_counts(), } # process piechart data series = QPieSeries() for atk, val in self.summary['Atk'].items(): series.append(str(atk), int(val)) self.series = series # process top protocol data self.protoports = self.data.transpose().groupby(["Protocol", "Port" ]).size().to_dict() self.protoports = { str(key[0]) + ':' + str(key[1]): value for key, value in self.protoports.items() } # create dictionary with key of format "protocol:port" # process barchart data self.bardata = self.data.transpose() self.bardata = pd.to_datetime(self.bardata['Time'], unit='s') self.bardata = self.bardata.groupby( [self.bardata.dt.year, self.bardata.dt.month])
def clear(self): self.__chart = QChart() self.setChart(self.__chart) self.chart().legend().hide() self.serie = QPieSeries() self.serie.setPieStartAngle(90) self.serie.setPieEndAngle(450)
def addSeries(self, key): self.chart.removeAllSeries() self.series = QPieSeries() self.series.setHoleSize(0.35) #Show chartview only if the content length is less than 6. Otherwise show a table view if len(self.data[key]) < 6: #print('length',self.data, key) for key, value in self.data[key].items(): print('key, value', key, value) slice_ = QPieSlice(str(key), value) self.series.append(slice_) self.series.setLabelsVisible() self.series.setLabelsPosition(QPieSlice.LabelInsideHorizontal) for slice in self.series.slices(): #slice.setLabel(slice.label()) slice.setLabel(slice.label() + ' - ' + str(slice.value()) + ' B ') self.chart.addSeries(self.series) self.frame.frame.hide() self.chart.show() else: self.table = TableView(self.data[key], len(self.data[key]), 1) if self.frame.ly.count() > 0: self.frame.ly.itemAt(0).widget().setParent(None) self.frame.ly.addWidget(self.table) self.frame.frame.show() self.chart.hide()
def addSeries(self, key): self.chart.removeAllSeries() self.series = QPieSeries() self.series.setHoleSize(0.35) #Show chartview only if the content length is less than 6. Otherwise show a table view if len(self.data[key]) < 6: for key, value in self.data[key].items(): slice_ = QPieSlice(str(key), value) self.series.append(slice_) for slice in self.series.slices(): slice.setLabel(slice.label()) self.chart.addSeries(self.series) self.frame.frame.hide() self.chart.show() else: for m, item in self.data[key].items(): print(m, item) self.table = TableView(self.data[key], len(self.data[key]), 1) if self.frame.ly.count() > 0: self.frame.ly.itemAt(0).widget().setParent(None) self.frame.ly.addWidget(self.table) self.frame.frame.show() self.chart.hide() self.series.doubleClicked.connect(self.handle_double_clicked)
def clear(self): self._chart = QChart() self.setChart(self._chart) self.setRenderHint(QPainter.Antialiasing) self.data = [] self.serie = QPieSeries() self.serie.setPieStartAngle(90) self.serie.setPieEndAngle(450) self.chart().legend().hide()
def load_slices(self): series = QPieSeries() for i in EXTENSHIONS.keys(): slice = QPieSlice(i, EXTENSHIONS[i][0]) v = EXTENSHIONS[i][1] slice.setPen(QPen(Qt.black, 2)) slice.hovered[bool].connect(functools.partial(self.explodeSlice, slice_=slice, v=v)) series.append(slice) return series
def get_data(self, mark_data): pie_series = QPieSeries() # 定义PieSeries total_area = 0 for j in range(len(mark_data)): total_area += mark_data[j][1] for j in range(len(mark_data)): percentage = mark_data[j][1] / total_area * 100 str1 = "{:.1f}%".format(percentage) + mark_data[j][0] pie_series.append(str1, mark_data[j][1]) return pie_series
def graph_chart(self): series = QPieSeries() for i in range(self.table.rowCount()): text = self.table.item(i, 0).text() val = float(self.table.item(i, 1).text().replace('$', '')) series.append(text, val) chart = QChart() chart.addSeries(series) chart.legend().setAlignment(Qt.AlignTop) self.chartView.setChart(chart)
def addSeries(self, key): self.chart.removeAllSeries() self.series = QPieSeries() self.series.setHoleSize(0.35) print('chart',key) for key, value in sampleData[key].items(): #print("adding series", str(key), value) slice_ = QPieSlice(str(key), value) self.series.append(slice_) self.chart.addSeries(self.series)
def createChart(self, names, values, title): series = QPieSeries() for name, value in zip(names, values): series.append(name + " " + str(value) + "%", value) chart = QChart() chart.addSeries(series) chart.setAnimationOptions(QChart.SeriesAnimations) chart.setTitle(title) chart.legend().setVisible(True) return chart
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()
def init_ui(self): self.chart = QChart() self.chart.setTheme(QChart.ChartThemeBlueIcy) self.chart.setAnimationDuration(1000) self.chart.setAnimationOptions(QChart.AllAnimations) self.serie = QPieSeries() self.layout = QVBoxLayout() self.layout_inp = QVBoxLayout() self.w_inp = QWidget() self.w_inp.setStyleSheet(""" .QWidget{ background-color: transparent; } """) self.w_inp.setLayout(self.layout_inp) self.setLayout(self.layout) self.inputs.append(InputPieChart(self)) self.btn_add = QPushButton("+") self.btn_remove = QPushButton("-") self.btn_add.clicked.connect(self.add_input) self.btn_remove.clicked.connect(self.remove_input) self.btn_add.setStyleSheet(""" border: 0px; background: green; color: white; """) self.btn_remove.setStyleSheet(""" border: 0px; background: red; color: white; """) self.header = HeaderPieChartInput() self.layout.addWidget(self.header) self.layout.addWidget(self.w_inp) self.layout.addStretch(-1) self.layout.addWidget(self.btn_remove) self.layout.addWidget(self.btn_add) self.layout_inp.addWidget(self.inputs[0]) self.serie.append(self.inputs[0].name.text(), 2) # self.slice.setExploded() # self.slice.setLabelVisible() # self.slice.setPen(QPen(Qt.darkGreen,2)) # self.slice.setBrush(Qt.green) self.chart.addSeries(self.serie) self.chart.setTitle("Pie Chart")
def addSeries(self, key): self.chart.removeAllSeries() self.series = QPieSeries() self.series.setHoleSize(0.35) for key, value in sampleData[key].items(): print("adding series", str(key), value) slice_ = QPieSlice(str(key), value) self.series.append(slice_) self.chart.addSeries(self.series) self.series.doubleClicked.connect(self.handle_double_clicked)
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 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 __init__(self, data: Dict[str, float]): """Constructor. Args: data (Dict[str, float]): [description]""" QPieSeries.__init__(self) self.setLabelsVisible() self.setLabelsPosition(QPieSlice.LabelInsideHorizontal) for data_key, data_point in data.items(): self.append(data_key, data_point) for slice in self.slices(): slice.setLabel("{:.2f}%".format(100 * slice.percentage()))
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)
def setupSeries(self, mode="all"): """ Chart gets updated displaying the new data. Modes: - all : distribution between all accounts - accs : distribution between portfolio accounts - cryptoaccs : distribution between crypto accounts - strategies : distribution between strategies """ # Series self.chart.removeAllSeries() # Remove any previous series self.series = QPieSeries() # Get data if mode == "all": data = balances.get_all_accounts( ) + cbalances.get_all_accounts_with_amount_fiat() elif mode == "accounts": data = balances.get_all_accounts() elif mode == "crypto": data = cbalances.get_all_accounts_with_amount_fiat() elif mode == "currency": data = [(confighandler.get_fiat_currency().upper(), balances.get_total_balance_all_accounts( )), ("BTC", cbalances.get_total_balance_all_accounts_fiat())] data.sort(key=lambda x: x[1]) # Sort # Set Chart Title self.total = sum([i[1] for i in data]) self.setDefaultTitle() # Add to series for d in data: self.series.append(d[0], d[1]) # Hide little slices' labels self.series.setLabelsVisible(True) for slc in self.series.slices(): if slc.angleSpan() < 5: slc.setLabelVisible(False) slc.setLabelArmLengthFactor(0.05) self.chart.addSeries(self.series) # Signals and functionality self.series.hovered.connect(self.selectSlice)
def create_chart(self, chartKey): self.series = QPieSeries() self.series.setHoleSize(0.35) self.chart = QChart() #Add series to the chart self.addSeries(chartKey) # for the background and title self.chart.setAnimationOptions(QChart.SeriesAnimations) self.chart.setTitle("DonutChart Example") self.chart.setTheme(QChart.ChartThemeBlueCerulean) self.chartview = QChartView(self.chart) self.chartview.setRenderHint(QPainter.Antialiasing)
def draw_pie_chart(self): self.chart_element = QPieSeries() self.chart_element.append("Free Space", 80) self.chart_element.append("Non Free Space", 100) self.chart_element.append("Swap", 150) self.chart = QChart() self.chart.addSeries(self.chart_element) self.chart.setAnimationOptions(QChart.SeriesAnimations) self.chart.setTitle("This is pie chart.") self.chartView = QChartView(self.chart) self.chartView.setRenderHint(QPainter.Antialiasing)
def set_slice(self, pie_series: QPieSeries, mark_data) -> QPieSeries: for i in range(len(mark_data)): slice_ = pie_series.slices()[i] # 地道饼图的某一个元素切片 slice_.setLabelVisible() # 设置各区域文本标签 slice_.setPen(QPen(Qt.darkGreen, 0)) # 设置画笔类型——边界线颜色 slice_.setBrush(mark_data[i][2]) # 设置笔刷——区域颜色 return pie_series
class VCPie(VCCommons): def __init__(self): VCCommons.__init__(self) self.setRenderHint(QPainter.Antialiasing) self.clear() def setCurrency(self, currency): """ currency is a Currency Object """ self.currency=currency def appendData(self, name, value, exploded=False): slice=self.serie.append(name, value) slice.setExploded(exploded) slice.setLabelVisible() def display(self): self.setChart(self.__chart) self.chart().layout().setContentsMargins(0,0,0,0); if self._animations==True: self.chart().setAnimationOptions(QChart.AllAnimations); else: self.chart().setAnimationOptions(QChart.NoAnimation) self._display_set_title() tooltip="" c=self.currency.string for slice in self.serie.slices(): tooltip=tooltip+"{}: {} ({})\n".format(slice.label(), c(slice.value()), Percentage(slice.percentage(), 1)).upper() slice.setLabel("{}: {}".format(slice.label(), Percentage(slice.percentage(), 1)).upper()) if slice.percentage()<0.005: slice.setLabelVisible(False) tooltip=tooltip+"*** Total: {} ***".format(c(self.serie.sum())).upper() self.chart().addSeries(self.serie) self.setToolTip(tooltip) self.repaint() def clear(self): self.__chart=QChart() self.setChart(self.__chart) self.chart().legend().hide() self.serie=QPieSeries() self.serie.setPieStartAngle(90) self.serie.setPieEndAngle(450)
def create_chart(self, chartKey): self.series = QPieSeries() self.series.setHoleSize(0.35) self.chart = QChart() #Add series to the chart self.addSeries(chartKey) # for the background and title self.chart.setAnimationOptions(QChart.SeriesAnimations) self.chart.setTitle("Code Size Visualizer") self.chart.legend().setVisible(True) self.chart.legend().setAlignment(Qt.AlignRight) self.chart.setTheme(QChart.ChartThemeBlueCerulean) self.chartview = QChartView(self.chart) self.chartview.setRenderHint(QPainter.Antialiasing)
def update_diagram(self): year = self.date_edit.get_year() month = self.date_edit.get_month() date_format = f"WHERE strftime(\"%Y\",DATE) = \"{year}\" AND strftime(\"%m\",DATE) = \"{month:02}\"" series = QPieSeries() for item in self.db.get_sum_by_category(date_format, self.type_inout): series.append(item[1], item[0]) for slice in series.slices(): slice.setLabel( slice.label() + ", " + f"{slice.value()}₽" + f" ({round(slice.value() / (series.sum() / 100))}%)") series.clicked.connect(self.pressed) self.chart.removeAllSeries() self.chart.addSeries(series) self.chart.setTitle("Доходы" if self.type_inout else "Расходы")
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 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 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