def prepare_chart(self): self.axisX = QtCharts.QValueAxis() self.axisX.setRange(self.posicionActual, self.posicionActual + 9) self.axisX.setTickCount(10) self.axisX.setTitleText('Tiempo (s)') self.chart.addAxis(self.axisX, Qt.AlignBottom) axisY = QtCharts.QCategoryAxis() max = 0 min = sys.maxsize counter = 0 for k in self.representations: value = int(k[1:]) if max < value: max = value if min > value: min = value axisY.append(k, value) counter += 1 axisY.setMax(max) axisY.setMin(min) axisY.setStartValue(min) axisY.setTitleText('Nivel') axisY.setLabelsPosition( QtCharts.QCategoryAxis.AxisLabelsPositionOnValue) self.chart.addAxis(axisY, Qt.AlignLeft) axisY2 = QtCharts.QCategoryAxis() axisY2.setLabelsPosition( QtCharts.QCategoryAxis.AxisLabelsPositionOnValue) axisY2.setTitleText('Bandwidth (Mbps)') self.current_bandwidth = 0.0 for k in self.representations: value = int(k[1:]) # ¡No puede haber dos label iguales! Hacen falta 3 decimales para distinguirlos. label = '%.3f' % (float(self.representations[k]['bps']) / 1.0e6) axisY2.append(label, value) self.chart.addAxis(axisY2, Qt.AlignRight) axisY2.setMax(max) axisY2.setMin(min) axisY2.setStartValue(min) # Serie de datos para gráfica del nivel de representación self.series = QtCharts.QLineSeries() self.series.setName('Nivel de representación') self.chart.addSeries(self.series) self.series.attachAxis(self.axisX) self.series.attachAxis(axisY)
def copyAxis(chart: QtCharts.QChart, axis: QtCharts.QAbstractAxis) -> QtCharts.QAbstractAxis: a_copy: QtCharts.QAbstractAxis if axis.type() == QtCharts.QAbstractAxis.AxisTypeBarCategory: a_copy = QtCharts.QBarCategoryAxis(chart) labels = axis.categories() a_copy.append(labels) elif axis.type() == QtCharts.QAbstractAxis.AxisTypeCategory: a_copy = QtCharts.QCategoryAxis(chart) labels = axis.categoriesLabels() a_copy.setStartValue(axis.startValue(labels[0])) a_copy.setLabelsPosition(axis.labelsPosition()) for lab in labels: a_copy.append(lab, axis.endValue(lab)) elif axis.type() == QtCharts.QAbstractAxis.AxisTypeValue: a_copy = QtCharts.QValueAxis(chart) a_copy.setMin(axis.min()) a_copy.setMax(axis.max()) a_copy.setTickCount(axis.tickCount()) a_copy.setMinorTickCount(axis.minorTickCount()) a_copy.setTickInterval(axis.tickInterval()) elif axis.type() == QtCharts.QAbstractAxis.AxisTypeDateTime: a_copy = QtCharts.QDateTimeAxis(chart) a_copy.setMin(axis.min()) a_copy.setMax(axis.max()) a_copy.setFormat(axis.format()) a_copy.setTickCount(axis.tickCount()) else: raise NotImplementedError('Cannot copy axis of type {}'.format( str(axis.type()))) a_copy.setTitleText(axis.titleText()) a_copy.setTitleFont(axis.titleFont()) return a_copy
def __init__(self, userID): super(userInfoVisual, self).__init__() self.setupUi(self) self.bg_pixmap = QPixmap(u":/bg.jpg") self.org_bg_pixmap = QPixmap(u":/bg.jpg") self.__userID = userID analyser = UserDataAnalysis(userID) self.info = analyser.user_info self.temp = analyser.user_temp self.time = analyser.user_time self.user_id.setText("用户ID:{}".format(str(userID))) self.user_name.setText("用户姓名:{}".format(str(analyser.user_name))) self.average_temperature.setText("平均温度:{}".format( round(analyser.average_temperature, 2))) self.max_temperature.setText("最高温度:{}".format( round(analyser.max_temperature, 2))) self.min_temperature.setText("最低温度:{}".format( round(analyser.min_temperature, 2))) self.record = '' self.user_info.setText("信息:\n {}".format(str(self.info))) self.set_slots() self.lineSeries = QtCharts.QLineSeries() self.lineSeries.setName("time-temp") self.data_set = [] for i, t in enumerate(self.temp): self.data_set.append(QPointF(i, t)) self.lineSeries.append(self.data_set) self.chart = QtCharts.QChart() self.chart.addSeries(self.lineSeries) self.chart.setTitle("用户个人温度变化曲线图") self.axisX = QtCharts.QCategoryAxis() for i, t in enumerate(self.time): self.axisX.append(t, i) self.chart.setAxisX(self.axisX, self.lineSeries) self.axisY = QtCharts.QValueAxis() self.chart.setAxisY(self.axisY, self.lineSeries) self.axisY.setRange(35, 39) self.chart.axisY().setTitleText("体温") self.chart.axisX().setTitleText("时间") self.chart.legend().setVisible(False) self.chartView = QtCharts.QChartView(self.chart, self.centralwidget) self.chartView.setRenderHint(QPainter.Antialiasing) self.chartView.setVisible(False)
def setData(self, data: Dict[Any, int], asRanges: bool = False): self.clearChart() if not data: return barSet = QtCharts.QBarSet('Frequency') frequencies = [f for f in data.values()] self.currentBinN = len(frequencies) barSet.append(frequencies) series = QtCharts.QBarSeries() series.append(barSet) chart = QtCharts.QChart() chart.addSeries(series) chart.setTitle('Value frequency ({} bins)'.format(self.currentBinN)) chart.setAnimationOptions(QtCharts.QChart.SeriesAnimations) labels = ['{:.2f}'.format(k) if isinstance(k, float) else str(k) for k in data.keys()] if asRanges: if isFloat(labels[0]): # Assume labels are float if len(labels) > 1: # If there is one or less labels stop lastEnd = float(labels[-1]) + (float(labels[1]) - float(labels[0])) labels.append('{:.2f}'.format(lastEnd)) axisX = QtCharts.QCategoryAxis() for i in range(len(labels) - 1): axisX.append(labels[i + 1], (i + 1) * 2 * series.barWidth()) axisX.setStartValue(0) axisX.setLabelsPosition(QtCharts.QCategoryAxis.AxisLabelsPositionCenter) else: axisX = QtCharts.QBarCategoryAxis() axisX.append(labels) # Set font font: QFont = axisX.labelsFont() font.setPointSize(11) axisX.setLabelsFont(font) chart.addAxis(axisX, Qt.AlignBottom) series.attachAxis(axisX) axisY = QtCharts.QValueAxis() axisY.setRange(0, max(frequencies) + 1) axisY.setLabelFormat('%d') chart.addAxis(axisY, Qt.AlignLeft) series.attachAxis(axisY) chart.legend().setVisible(False) self.chart = chart self.chartView.setChart(self.chart)
def __createTimeAxis(self, timeSeries: pd.Series, timeType: Type) -> QtCharts.QAbstractAxis: """ Creates a time axis showing 'timeSeries' values of specified type (Ordinal or Datetime) """ if timeType == Types.Datetime: # Time axis is Datetime xAxis = QtCharts.QDateTimeAxis() xAxis.setFormat(self.settingsPanel.timeAxisFormatCB.currentText()) else: # Time axis is Ordinal (time are str labels) xAxis = QtCharts.QCategoryAxis() for cat, code in zip(timeSeries, timeSeries.cat.codes): xAxis.append(cat, code) xAxis.setStartValue(0) xAxis.setLabelsPosition( QtCharts.QCategoryAxis.AxisLabelsPositionOnValue) xAxis.setTitleText('Time') return xAxis