Exemple #1
0
    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)
Exemple #2
0
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)
Exemple #4
0
    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)
Exemple #5
0
 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