def __actualizar_grafico_barras(self): self.grafico.legend().setVisible(True) medias = [ math.floor(np.mean(datos)) if len(datos) > 0 else 0 for datos in self.datos.values() ] mejores = [ np.min(datos) if len(datos) > 0 else 0 for datos in self.datos.values() ] peores = [ np.max(datos) if len(datos) > 0 else 0 for datos in self.datos.values() ] self.eje_y.setRange(1, max(max(medias), max(peores))) barset_media = QBarSet('Media') barset_media.append(medias) barset_mejor = QBarSet('Mejor') barset_mejor.append(mejores) barset_peor = QBarSet('Peor') barset_peor.append(peores) series = QBarSeries() series.append(barset_media) series.append(barset_mejor) series.append(barset_peor) series.setLabelsVisible(True) self.grafico.addSeries(series) series.attachAxis(self.eje_y) self.init_grafico()
def ALL(self): self.ind = 0 set0 = QBarSet('Daya Tarik') set1 = QBarSet('Aksesbilitas') set2 = QBarSet('Kebersihan') set3 = QBarSet('Fasilitas') set0.setColor(QtGui.QColor("blue")) set1.setColor(QtGui.QColor("red")) set2.setColor(QtGui.QColor("green")) set3.setColor(QtGui.QColor("orange")) gf = Grafik_2() jml = gf.jumlah_per_pantai() jml_pantai = [] for i in range(len(jml)): jml_pantai.append(jml[i]) hasil = gf.hasil_dayatarik() for i in range(len(hasil)): set0.append((hasil[i] / jml_pantai[i]) * 100) hasil2 = gf.hasil_aksesbilitas() for i in range(len(hasil2)): set1.append((hasil2[i] / jml_pantai[i]) * 100) hasil3 = gf.hasil_kebersihan() for i in range(len(hasil3)): set2.append((hasil3[i] / jml_pantai[i]) * 100) hasil4 = gf.hasil_fasilitas() for i in range(len(hasil4)): set3.append((hasil4[i] / jml_pantai[i]) * 100) series = QBarSeries() series.append(set0) series.append(set1) series.append(set2) series.append(set3) series.setLabelsVisible(True) series.setLabelsPosition(QAbstractBarSeries.LabelsInsideEnd) series.setLabelsAngle(-90) self.chart = QChart() self.chart.addSeries(series) self.chart.setTitle('Grafik Prosentase Ulasan Pantai') self.chart.setAnimationOptions(QChart.SeriesAnimations) axisY = QValueAxis() axisY.setTitleText("Prosentase (%)") axisY.applyNiceNumbers() self.chart.addAxis(axisY, Qt.AlignLeft) series.attachAxis(axisY) self.chart.legend().setVisible(True) self.chart.legend().setAlignment(Qt.AlignBottom) self.chart.createDefaultAxes() self.graphicsView.setChart(self.chart) self.adjust_axes(0, 2) self.lims = np.array([0, 6]) self.onAxisSliderMoved(self.verticalScrollBar.value())
def crearGraficoBarras(self): paises = [ "EEUU", "China", "Japon", "Alemania", "Reino Unido", "Resto del mundo" ] valores = [24.32, 14.85, 8.91, 12.54, 7.85, 31.53] colores = [ Qt.blue, Qt.red, Qt.darkYellow, Qt.gray, Qt.black, Qt.darkCyan ] grafico = QChart() grafico.setMargins(QMargins(30, 30, 30, 30)) grafico.setTheme(QChart.ChartThemeLight) grafico.setTitle("% Distribución del PIB global") grafico.setAnimationOptions(QChart.SeriesAnimations) for i in range(len(paises)): series = QBarSeries() barSet = QBarSet(paises[i]) barSet.setColor(colores[i]) barSet.setLabelColor(Qt.yellow) barSet.append(valores[i]) series.append(barSet) series.setLabelsVisible(True) series.setLabelsAngle(-90) # series.setLabelsPrecision(2) series.setLabelsFormat("@value %") series.setLabelsPosition(QAbstractBarSeries.LabelsCenter) grafico.addSeries(series) axisX = QBarCategoryAxis() axisX.append(paises) axisY = QValueAxis() axisY.setRange(0, 31.53) axisY.setTickCount(10) axisY.setLabelFormat("%.2f %") grafico.createDefaultAxes() grafico.setAxisX(axisX, None) grafico.setAxisY(axisY, None) grafico.legend().setVisible(True) grafico.legend().setAlignment(Qt.AlignBottom) return grafico
def DT(self): self.ind = 1 gf = Grafik_2() jml = gf.jumlah_per_pantai() jml_pantai = [] for i in range(len(jml)): jml_pantai.append(jml[i]) value = [] hasil = gf.hasil_dayatarik() for i in range(len(hasil)): value.append((hasil[i] / jml_pantai[i]) * 100) sorting = sorted(value, reverse=True) index = np.argsort(value)[::-1] label_sorting = [] for i in index: label_sorting.append(self.label_pantai[i]) set0 = QBarSet('Daya Tarik') set0.setColor(QtGui.QColor("blue")) for i in range(len(hasil)): set0.append(sorting) series = QBarSeries() series.append(set0) series.setLabelsVisible(True) series.setLabelsPosition(QAbstractBarSeries.LabelsInsideEnd) self.chart = QChart() self.chart.addSeries(series) self.chart.setTitle('Grafik Prosentase Ulasan Pantai') self.chart.setAnimationOptions(QChart.SeriesAnimations) axisX = QBarCategoryAxis() axisX.setLabelsAngle(-90) axisY = QValueAxis() axisY.setTitleText("Prosentase (%)") self.chart.addAxis(axisX, Qt.AlignBottom) self.chart.addAxis(axisY, Qt.AlignLeft) series.attachAxis(axisY) axisY.applyNiceNumbers() self.chart.legend().setVisible(True) self.chart.legend().setAlignment(Qt.AlignBottom) self.chart.createDefaultAxes() self.graphicsView.setChart(self.chart) self.lims = np.array([0, 10]) self.onAxisSliderMoved(self.verticalScrollBar.value())
def KB(self): self.ind = 3 gf = Grafik_2() jml = gf.jumlah_per_pantai() jml_pantai = [] for i in range(len(jml)): jml_pantai.append(jml[i]) value = [] hasil = gf.hasil_kebersihan() for i in range(len(hasil)): value.append((hasil[i] / jml_pantai[i]) * 100) sorting = sorted(value, reverse=True) set0 = QBarSet('Kebersihan') set0.setColor(QtGui.QColor("green")) for i in range(len(hasil)): set0.append(sorting) series = QBarSeries() series.append(set0) series.setLabelsVisible(True) series.setLabelsPosition(QAbstractBarSeries.LabelsInsideEnd) self.chart = QChart() self.chart.addSeries(series) self.chart.setTitle('Grafik Prosentase Ulasan Pantai') self.chart.setAnimationOptions(QChart.SeriesAnimations) axisY = QValueAxis() axisY.setTitleText("Prosentase (%)") axisY.applyNiceNumbers() self.chart.addAxis(axisY, Qt.AlignLeft) series.attachAxis(axisY) self.chart.legend().setVisible(True) self.chart.legend().setAlignment(Qt.AlignBottom) self.chart.createDefaultAxes() self.graphicsView.setChart(self.chart) self.adjust_axes(0, 2) self.lims = np.array([0, 10]) self.onAxisSliderMoved(self.verticalScrollBar.value())
class LastMonthsHistogram(QChartView): """ Chart that displays the balance from the whole portfolio from the last months """ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.chart = QChart() def setupChartWithData(self): """ Chart gets updated displaying the new data. Data has to be expressed on a dictionary form: - keys are timestamps - values are total balance for that timestamp """ self.chart = QChart() self.chart.setTheme(QChart.ChartThemeDark) self.chart.setAnimationOptions(QChart.SeriesAnimations) self.chart.setBackgroundBrush(QBrush(QColor("transparent"))) # Series self.barseries = QBarSeries() currentyear, currentmonth = datetime.today().year, datetime.today( ).month dates, amounts = [], [] # Get 5 previous month numbers for _ in range(5): dates.append((currentmonth, currentyear)) currentmonth -= 1 if currentmonth == 0: currentmonth = 12 currentyear -= 1 # Get amounts for each month for d in dates: month, year = d amounts.append( dbhandler.get_total_wealth_on_month(month, year=year)) # Iterate months and amount and insert them into the histogram appropiately barset = QBarSet('Total wealth') labelsfont = QFont() labelsfont.setFamily('Inter') labelsfont.setBold(True) barset.setLabelFont(labelsfont) barset.setColor(QColor("#D3EABD")) x_values = [] for d, a in zip(reversed(dates), reversed(amounts)): if a > 0: barset.append(int(a)) x_values.append(calendar.month_name[d[0]]) self.barseries.append(barset) self.barseries.setName("Last Months") self.barseries.setLabelsVisible(True) self.barseries.setBarWidth(0.2) self.barseries.setLabelsPosition(QAbstractBarSeries.LabelsOutsideEnd) self.chart.addSeries(self.barseries) # Axis X (Dates) self.x_axis = QBarCategoryAxis() self.x_axis.setTitleText(self.tr('Date')) labelsfont = QFont() labelsfont.setFamily('Roboto') labelsfont.setLetterSpacing(QFont.AbsoluteSpacing, 1) labelsfont.setWeight(QFont.Light) labelsfont.setPointSize(9) self.x_axis.setLabelsFont(labelsfont) self.x_axis.setGridLineVisible(False) self.x_axis.setLineVisible(False) self.x_axis.setLinePenColor(QColor("#D3EABD")) self.x_axis.setTitleVisible(False) self.x_axis.append(x_values) self.chart.addAxis(self.x_axis, Qt.AlignBottom) # Axis Y (Balances) self.y_axis = QValueAxis() self.y_axis.setMax(max(amounts) * 1.3) self.y_axis.setMin(min(amounts) * 0.95) self.y_axis.hide() labelsfont = QFont() labelsfont.setPointSize(4) self.y_axis.setLabelsFont(labelsfont) self.chart.addAxis(self.y_axis, Qt.AlignLeft) # Attach axis to series self.barseries.attachAxis(self.x_axis) self.barseries.attachAxis(self.y_axis) # Legend self.chart.legend().hide() # Set up chart on ChartView self.setChart(self.chart) self.setRenderHint(QPainter.Antialiasing) self.setStyleSheet("border: 0px; background-color: rgba(0,0,0,0)")
def selectionChange(self): pilih_pantai = str(self.comboBox.currentText()) if pilih_pantai == '-Pilih-': self.ALL() return gf = Grafik(pilih_pantai) hasil = gf.hasil_grafik() hasil_dayatarik = hasil[0] hasil_aksesbilitas = hasil[1] hasil_kebersihan = hasil[2] hasil_fasilitas = hasil[3] total_pantai = hasil[4] daya_tarik = (hasil_dayatarik / total_pantai) * 100 aksesbilitas = (hasil_aksesbilitas / total_pantai) * 100 kebersihan = (hasil_kebersihan / total_pantai) * 100 fasilitas = (hasil_fasilitas / total_pantai) * 100 nilai = { 'Daya Tarik': daya_tarik, 'Aksesbilitas': aksesbilitas, 'Kebersihan': kebersihan, 'Fasilitas': fasilitas } maks = max(nilai['Daya Tarik'], nilai['Aksesbilitas'], nilai['Kebersihan'], nilai['Fasilitas']) for i in nilai: if maks == nilai[i]: print(i) set0 = QBarSet(pilih_pantai) set0 << daya_tarik << aksesbilitas << kebersihan << fasilitas series = QBarSeries() series.append(set0) series.setLabelsVisible(True) chart = QChart() chart.addSeries(series) chart.setTitle('Pantai ' + str(pilih_pantai)) labelnya = ["Daya Tarik", "Aksesbilitas", "Kebersihan", "Fasilitas"] series = QPieSeries() series.append("dt", daya_tarik) series.append("ak", aksesbilitas) series.append("keb", kebersihan) series.append("fas", fasilitas) slice = QPieSlice() slice = series.slices()[0] slice.setExploded(False) slice.setLabelVisible(True) slice.setBrush(QtGui.QColor("blue")) slice = QPieSlice() slice = series.slices()[1] slice.setExploded(False) slice.setLabelVisible(True) slice.setBrush(QtGui.QColor("red")) slice = QPieSlice() slice = series.slices()[2] slice.setExploded(False) slice.setLabelVisible(True) slice.setBrush(QtGui.QColor("green")) slice = QPieSlice() slice = series.slices()[3] slice.setExploded(False) slice.setLabelVisible(True) slice.setBrush(QtGui.QColor("orange")) i = 0 for slice in series.slices(): slice.setLabel(labelnya[i] + " {:.1f}%".format(100 * slice.percentage())) i = i + 1 chart = QChart() chart.legend().hide() chart.addSeries(series) chart.createDefaultAxes() chart.setAnimationOptions(QChart.SeriesAnimations) self.graphicsView.setChart(chart)
class Barchart: def __init__(self, data): ''' Processes BarChart Data Parameters ----------------------- data : Pandas DataFrame to be processed ''' self.data = data self.handler() def handler(self): ''' Processes Data ''' barset = QBarSet('Attacks') countdata = self.data.agg('count') self.max = countdata.max() now = time.localtime() past12months = [ time.localtime( time.mktime( (now.tm_year, now.tm_mon - n, 1, 0, 0, 0, 0, 0, 0)))[:2] for n in range(12) ] # get the past 12 months from current date datadict = {} for key in past12months: for k, v in countdata.items(): if k == key: datadict[k] = v # set value to 0 if no attacks in a key (month) for k in past12months: if k not in datadict.keys(): datadict[k] = 0 self.sorteddict = OrderedDict(sorted(datadict.items())) setlist = [ value for key, value in self.sorteddict.items() ] # list of attack counts over the past 12 months to append to barset barset.append(setlist) self.series = QBarSeries() self.series.setLabelsVisible(True) self.series.append(barset) def getSeries(self): ''' Returns Series for QChart ''' return self.series def getKeys(self): ''' Returns the month/year for the X-Axis ''' months = tuple(self.sorteddict.keys()) monthdict = { 1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun', 7: 'Jul', 8: 'Aug', 9: 'Sept', 10: 'Oct', 11: 'Nov', 12: 'Dec' } output = [] for item in months: mmyy = str(monthdict[item[1]]) + " " + str(item[0]) output.append(mmyy) return tuple(output) def getMax(self): ''' Returns highest attack count for the Y-Axis ''' return self.max