def __init__(self, parent=None):
        super(TestChart, self).__init__(parent)
        self.xRange = 800
        self.sampleRate = 5
        self.counter = 0
        self.seriesList = []
        self.legend().show()

        self.axisX = QValueAxis()
        self.axisX.setRange(0, self.xRange)
        self.addAxis(self.axisX, Qt.AlignBottom)
        # self.setAxisX(self.axisX, series)

        self.axisY = QValueAxis()
        self.axisY.setRange(-1, 1)
        self.addAxis(self.axisY, Qt.AlignLeft)
        # self.setAxisY(self.axisY, series)

        for i in range(24):
            series = QLineSeries()
            series.setName("Series" + str(i))
            series.setUseOpenGL(True)
            self.addSeries(series)
            self.seriesList.append(series)
            series.attachAxis(self.axisX)
            series.attachAxis(self.axisY)
 def add_new_data(self, data: dict):
     self.x += self.time.msec()
     self.time.start()
     if self.x > 10000:
         self.ax.setRange(self.x - 10000, self.x)
     for key in data:
         try:
             value = float(data[key])
         except ValueError:
             continue
         if value > self.ymax:
             self.ymax = value
             self.ay.setRange(self.ymin, self.ymax)
         elif value < self.ymin:
             self.ymin = value
             self.ay.setRange(self.ymin, self.ymax)
         if key in self.lines:
             if self.lines[key].__len__() >= 32:
                 # self.lines[key].replace(0,self.x, value)
                 self.lines[key].remove(0)
             # else:
             self.lines[key].append(self.x, value)
         else:
             # ls = QSplineSeries(self)
             ls = QLineSeries(self)
             ls.append(self.x, value)
             ls.setColor(
                 QColor(random.randint(0, 255), random.randint(0, 255),
                        random.randint(0, 255)))
             ls.setName(key)
             self.chart().addSeries(ls)
             self.chart().setAxisX(self.ax, ls)
             self.chart().setAxisY(self.ay, ls)
             self.lines[key] = ls
예제 #3
0
    def __init__(self, number: int, parent=None):
        super(QWidget, self).__init__(parent)

        self.layout = QVBoxLayout(self)

        self.chart = QChart()
        self.chartView = QChartView(self.chart)
        self.chartView.setRenderHint(QPainter.Antialiasing)  # 抗锯齿
        self.layout.addWidget(self.chartView)

        self.channelNumber = number
        for index in range(self.channelNumber):
            tmp = QLineSeries()
            tmp.setName("channel "+str(index))
            self.chart.addSeries(tmp)

        self.chart.createDefaultAxes()
        self.chart.axisX().setRange(0, 25)
        self.chart.axisX().setTitleText("AAA")
        self.chart.axisY().setRange(0, 25)
        self.chart.axisY().setTitleText("BBB")

        # 标题
        self.chart.setTitle("XXX XXX XXX")
        # 指示颜色所代表的内容
        # self.chart.legend().hide()
        # 动画效果
        self.chart.setAnimationOptions(QChart.AllAnimations)
예제 #4
0
    def start_record(self):
        self.chart.removeAllSeries()
        self.series = []

        try:
            for port in self.ports:
                udp = UdpServer(port)
                udp.start()
                self.udpthreads.append(udp)
                series = QLineSeries()
                series.setName(str(port))
                self.chart.addSeries(series)
        finally:
            pass

        if not self.chkMode.isChecked():
            series = QLineSeries()
            series.setName("Total")
            self.chart.addSeries(series)

        self.chart.createDefaultAxes()

        axis_x = self.chart.axisX()
        axis_x.setRange(0, self.axis_x_val)
        axis_x.setLabelFormat("%g")
        axis_x.setTitleText("Time / " + self.axis_x_unit_str[self.axis_x_unit])

        axis_y = self.chart.axisY()
        axis_y.setRange(0, self.axis_y_val)
        axis_y.setLabelFormat("%g")
        axis_y.setTitleText("Bitrate / " +
                            self.axis_y_unit_str[self.axis_y_unit])

        self.timer.start(self.axis_x_step * 1000)
예제 #5
0
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle("Demo12_1, QChart 基本绘图")
        self.resize(580, 420)
        chart = QChart()
        chart.setTitle("简单函数曲线")
        chartView = QChartView(self)
        chartView.setChart(chart)
        self.setCentralWidget(chartView)
        series0 = QLineSeries()
        series1 = QLineSeries()
        series0.setName("sin曲线")
        series1.setName("cos曲线")
        chart.addSeries(series0)
        chart.addSeries(series1)
        t = 0
        intv = 0.1
        pointCount = 100
        for i in range(pointCount):
            y1 = math.cos(t)
            series0.append(t, y1)
            y2 = 1.5 * math.sin(t + 20)
            series1.append(t, y2)
            t = t + intv
        axisX = QValueAxis()
        axisX.setRange(0, 10)
        axisX.setTitleText("time(secs)")
        axisY = QValueAxis()
        axisY.setRange(-2, 2)
        axisY.setTitleText("value")

        chart.setAxisX(axisX, series0)
        chart.setAxisY(axisY, series0)
        chart.setAxisX(axisX, series1)
        chart.setAxisY(axisY, series1)
예제 #6
0
    def setupChart(self):
        """Set up the GUI's series and chart."""
        # Collect x and y data values from the CSV file
        x_values, y_values = self.loadCSVFile()

        # Get the largest x and y values; Used for setting the chart's axes
        x_max, y_max = max(x_values), max(y_values)

        # Create numpy arrays from the x and y values
        x_values = np.array(x_values)
        y_values = np.array(y_values)

        # Calculate the regression line
        coefficients = linearRegression(x_values, y_values)

        # Create chart object
        chart = QChart()
        chart.setTitle("Auto Insurance for Geographical Zones in Sweden")
        chart.legend().hide()

        # Create scatter series and add points to the series
        scatter_series = QScatterSeries()
        scatter_series.setName("DataPoints")
        scatter_series.setMarkerSize(9.0)
        scatter_series.hovered.connect(self.displayPointInfo)

        for value in range(0, self.row_count - 1):
            scatter_series.append(x_values[value], y_values[value])
            scatter_series.setBorderColor(QColor('#000000'))

        # Create line series and add points to the series
        line_series = QLineSeries()
        line_series.setName("RegressionLine")

        # Calculate the regression line
        for x in x_values:
            y_pred = coefficients[0] + coefficients[1] * x
            line_series.append(x, y_pred)

        # Add both series to the chart and create x and y axes
        chart.addSeries(scatter_series)
        chart.addSeries(line_series)
        chart.createDefaultAxes()

        axis_x = chart.axes(Qt.Horizontal)
        axis_x[0].setTitleText("Number of Claims")
        axis_x[0].setRange(0, x_max)
        axis_x[0].setLabelFormat("%i")

        axis_y = chart.axes(Qt.Vertical)
        axis_y[0].setTitleText(
            "Total Payment in Swedish Kronor (in thousands)")
        axis_y[0].setRange(0, y_max + 20)

        # Create QChartView object for displaying the chart
        chart_view = QChartView(chart)

        v_box = QVBoxLayout()
        v_box.addWidget(chart_view)
        self.setLayout(v_box)
예제 #7
0
    def __init__(self, spec):
        super().__init__(None)
        self.spec = spec
        self.chart = QChart()
        # self.chart.setTitle(str(self.spec.variables))
        # self.chart.legend().hide()

        for i in range(len(self.spec.variables)):
            series = QLineSeries()
            series.setColor(
                QColor(
                    self.spec.colors[i][0],
                    self.spec.colors[i][1],
                    self.spec.colors[i][2],
                ))
            series.setName(self.spec.variables[i])
            self.chart.addSeries(series)

        self.setMinimumWidth(400)
        self.setMinimumHeight(230)

        self.setChart(self.chart)
        self.setRenderHint(QPainter.Antialiasing)
        self.chart.createDefaultAxes()
        self.autoscale_y_axis = True
        if self.spec.min_y and self.spec.max_y:
            self.autoscale_y_axis = False
            self.chart.axes()[1].setRange(self.spec.min_y, self.spec.max_y)

        self._updates_per_second = 60
        self._data = []
        self._min = 0
        self._max = 0
예제 #8
0
    def initChart(self, NumSection, Alltime, PlotData, name):
        self._chart = QChart(title=name)
        self._chart.setAcceptHoverEvents(True)
        # Series动画
        self._chart.setAnimationOptions(QChart.SeriesAnimations)
        # dataTable = [
        #     ["邮件营销", [120, 132, 101, 134, 90, 230]],
        #     ["联盟广告", [220, 182, 191, 234, 290, 330, 310]],
        #     ["视频广告", [150, 232, 201, 154, 190, 330, 410]],
        #     ["直接访问", [320, 332, 301, 334, 390, 330, 320]],
        #     ["搜索引擎", [820, 932, 901, 934, 1290, 1330, 1320]]
        # ]
        for series_name, data_list, label_list in PlotData:
            series = QLineSeries(self._chart)
            for j, v in zip(label_list, data_list):
                series.append(j, v)
            series.setName(series_name)
            series.setPointsVisible(True)  # 显示圆点
            series.hovered.connect(self.handleSeriesHoverd)  # 鼠标悬停
            self._chart.addSeries(series)
        self._chart.createDefaultAxes()  # 创建默认的轴
        axisX = self._chart.axisX()  # x轴
        axisX.setTickCount(Alltime)  # x轴设置7个刻度
        axisX.setGridLineVisible(False)  # 隐藏从x轴往上的线条
        axisY = self._chart.axisY()
        axisY.setTickCount(NumSection)  # y轴设置7个刻度
        axisY.setRange(0, NumSection)  # 设置y轴范围
        # 自定义x轴
        axis_x = QCategoryAxis(
            self._chart,
            labelsPosition=QCategoryAxis.AxisLabelsPositionOnValue)
        axis_x.setTickCount(Alltime + 1)
        axis_x.setGridLineVisible(False)
        min_x = axisX.min()
        for i in range(0, Alltime + 1):
            axis_x.append(str(i), min_x + i)
        self._chart.setAxisX(axis_x, self._chart.series()[-1])

        # 自定义y轴
        axis_y = QCategoryAxis(
            self._chart, labelsPosition=QCategoryAxis.AxisLabelsPositionCenter)
        axis_y.setTickCount(NumSection)
        axis_y.setRange(0, NumSection)
        for i in range(0, NumSection + 1):
            axis_y.append('section%i' % (NumSection - i + 1), i)
        self._chart.setAxisY(axis_y, self._chart.series()[-1])
        # chart的图例
        legend = self._chart.legend()
        # 设置图例由Series来决定样式
        legend.setMarkerShape(QLegend.MarkerShapeFromSeries)
        # 遍历图例上的标记并绑定信号
        for marker in legend.markers():
            # 点击事件
            marker.clicked.connect(self.handleMarkerClicked)
            # 鼠标悬停事件
            marker.hovered.connect(self.handleMarkerHovered)
        self.setChart(self._chart)
예제 #9
0
    def __init__(self, parent=None):
        super(TableWidget, self).__init__(parent)

        # Create a simple model for storing data.
        model = CustomTableModel()

        # Create the table view and add the model to it.
        tableView = QTableView()
        tableView.setModel(model)
        tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        tableView.verticalHeader().setSectionResizeMode(QHeaderView.Stretch)

        chart = QChart()
        chart.setAnimationOptions(QChart.AllAnimations)

        # Series 1.
        series = QLineSeries()
        series.setName("Line 1")

        mapper = QVXYModelMapper(self)
        mapper.setXColumn(0)
        mapper.setYColumn(1)
        mapper.setSeries(series)
        mapper.setModel(model)
        chart.addSeries(series)

        # Get the color of the series and use it for showing the mapped area.
        seriesColorHex = self._series_color(series)
        model.addMapping(seriesColorHex, QRect(0, 0, 2, model.rowCount()))

        # Series 2.
        series = QLineSeries()
        series.setName("Line 2")

        mapper = QVXYModelMapper(self)
        mapper.setXColumn(2)
        mapper.setYColumn(3)
        mapper.setSeries(series)
        mapper.setModel(model)
        chart.addSeries(series)

        # Get the color of the series and use it for showing the mapped area.
        seriesColorHex = self._series_color(series)
        model.addMapping(seriesColorHex, QRect(2, 0, 2, model.rowCount()))

        chart.createDefaultAxes()
        chartView = QChartView(chart)
        chartView.setRenderHint(QPainter.Antialiasing)
        chartView.setMinimumSize(640, 480)

        # Create the main layout.
        mainLayout = QGridLayout()
        mainLayout.addWidget(tableView, 1, 0)
        mainLayout.addWidget(chartView, 1, 1)
        mainLayout.setColumnStretch(1, 1)
        mainLayout.setColumnStretch(0, 0)
        self.setLayout(mainLayout)
예제 #10
0
    def __init__(self, window):
        super().__init__()

        self.windowWidget = window

        self.repaintChartEvent.connect(self.repaint_chart)

        self.lambda_value = 0.2
        self.beta_value = 3
        self.mu_value = 0.8

        grid = QGridLayout()
        self.setLayout(grid)

        self.table = MyQtTable.MyQtTable(1, 1)
        self.table.setFixedWidth(150)
        grid.addWidget(self.table, 1, 0, -1, 1)

        series = QLineSeries()
        series.setName("Values time series")

        self.chart_view = MyQtChart.MyChartView(series,
                                                "Chart",
                                                "Time",
                                                "Value",
                                                minimumSize=QSize(800, 650))
        grid.addWidget(self.chart_view, 2, 1, 1, -1)

        self.table.newTableDataEvent.connect(self.update_chart)

        lambdaValueLabel = QLabel("λ=%.2f" % self.lambda_value)
        grid.addWidget(lambdaValueLabel, 1, 1)
        self.lambdaValueLabel = lambdaValueLabel

        qslider = QSlider(Qt.Horizontal)
        qslider.setMinimum(0)
        qslider.setMaximum(100)
        qslider.setValue(self.lambda_value * 100)
        qslider.valueChanged.connect(self.on_lambda_changed)
        qslider.sliderMoved.connect(
            lambda v: lambdaValueLabel.setText("λ=%.2f" % (v / 100)))
        qslider.setTracking(False)
        grid.addWidget(qslider, 1, 2)

        grid.addWidget(QLabel("μ="), 1, 3)
        muEdit = QDoubleSpinBox()
        muEdit.setValue(self.mu_value)
        muEdit.setSingleStep(0.1)
        grid.addWidget(muEdit, 1, 4)
        muEdit.valueChanged.connect(self.on_mu_changed)

        grid.addWidget(QLabel("β="), 1, 5)
        betaEdit = QDoubleSpinBox()
        betaEdit.setValue(self.beta_value)
        betaEdit.setSingleStep(0.1)
        grid.addWidget(betaEdit, 1, 6)
        betaEdit.valueChanged.connect(self.on_beta_changed)
예제 #11
0
    def initChart(self):
        self._chart = QChart(title="农业大棚数据监测曲线")
        self._chart.setAcceptHoverEvents(True)
        # Series动画
        self._chart.setAnimationOptions(QChart.SeriesAnimations)

        dataTable = [["大棚湿度", []], ["大棚温度", []], ["大棚二氧化碳浓度", []]]
        data = pd.read_csv("data/data.csv")
        list = data.values.tolist()
        for i in range(30):
            dataTable[0][1].append(list[i * 60][3])
            dataTable[1][1].append(list[i * 60][4])
            dataTable[2][1].append(list[i * 60][5])

        # dataTable = [
        #     ["邮件营销", [120, 132, 101, 134, 90, 230, 210]],
        #     ["直接访问", [320, 332, 301, 334, 390, 330, 320]],
        #     ["搜索引擎", [820, 932, 901, 934, 1290, 1330, 1320]]
        # ]
        for series_name, data_list in dataTable:
            series = QLineSeries(self._chart)
            for j, v in enumerate(data_list):
                series.append(j, v)
            series.setName(series_name)
            series.setPointsVisible(True)  # 显示圆点
            series.hovered.connect(self.handleSeriesHoverd)  # 鼠标悬停
            self._chart.addSeries(series)
        self._chart.createDefaultAxes()  # 创建默认的轴
        axisX = self._chart.axisX()  # x轴
        axisX.setTickCount(30)  # x轴设置30个刻度
        axisX.setGridLineVisible(False)  # 隐藏从x轴往上的线条
        axisY = self._chart.axisY()
        axisY.setTickCount(10)  # y轴设置10个刻度
        axisY.setRange(0, 100)  # 设置y轴范围
        # 自定义x轴
        axis_x = QCategoryAxis(
            self._chart,
            labelsPosition=QCategoryAxis.AxisLabelsPositionOnValue)
        axis_x.setTickCount(30)
        axis_x.setGridLineVisible(False)
        min_x = axisX.min()
        max_x = axisX.max()
        step = (max_x - min_x) / (30 - 1)  # 7个tick
        for i in range(0, 30):
            axis_x.append(self.category[i], min_x + i * step)
        self._chart.setAxisX(axis_x, self._chart.series()[-1])
        # chart的图例
        legend = self._chart.legend()
        # 设置图例由Series来决定样式
        legend.setMarkerShape(QLegend.MarkerShapeFromSeries)
        # 遍历图例上的标记并绑定信号
        for marker in legend.markers():
            # 点击事件
            marker.clicked.connect(self.handleMarkerClicked)
            # 鼠标悬停事件
            marker.hovered.connect(self.handleMarkerHovered)
        self.setChart(self._chart)
예제 #12
0
    def add_series(self, x_list, y_list, name):
        series = QLineSeries()
        series.setName(name)

        for x, y in zip(x_list, y_list):
            series.append(x, y)

        self.model.addSeries(series)
        self.model.createDefaultAxes()
예제 #13
0
   def __createChart(self):
      self.__chart = QChart()
      self.__chart.setTitle("简单函数曲线")
      self.ui.chartView.setChart(self.__chart)
      self.ui.chartView.setRenderHint(QPainter.Antialiasing)

      series0 =  QLineSeries()
      series0.setName("Sin曲线")
      series1 =  QLineSeries()
      series1.setName("Cos曲线")
      self.__curSeries=series0   #当前序列

      pen=QPen(Qt.red)
      pen.setStyle(Qt.DotLine)   #SolidLine, DashLine, DotLine, DashDotLine
      pen.setWidth(2)
      series0.setPen(pen)        #序列的线条设置

      pen.setStyle(Qt.SolidLine) #SolidLine, DashLine, DotLine, DashDotLine
      pen.setColor(Qt.blue)
      series1.setPen(pen)        #序列的线条设置

      self.__chart.addSeries(series0)
      self.__chart.addSeries(series1)

      axisX = QValueAxis()
      self.__curAxis=axisX       #当前坐标轴
      axisX.setRange(0, 10)      #设置坐标轴范围
      axisX.setLabelFormat("%.1f")  #标签格式
      axisX.setTickCount(11)        #主分隔个数
      axisX.setMinorTickCount(4)
      axisX.setTitleText("time(secs)")  #标题
      axisX.setGridLineVisible(True)
      axisX.setMinorGridLineVisible(False)

      axisY = QValueAxis()
      axisY.setRange(-2, 2)
      axisY.setLabelFormat("%.2f")     #标签格式
      axisY.setTickCount(5)
      axisY.setMinorTickCount(4)
      axisY.setTitleText("value")
      axisY.setGridLineVisible(True)
      axisY.setMinorGridLineVisible(False)

   ##      self.__chart.setAxisX(axisX, series0) #添加X坐标轴
   ##      self.__chart.setAxisX(axisX, series1) #添加X坐标轴
   ##      self.__chart.setAxisY(axisY, series0) #添加Y坐标轴
   ##      self.__chart.setAxisY(axisY, series1) #添加Y坐标轴

   ##另一种实现设置坐标轴的方法
      self.__chart.addAxis(axisX,Qt.AlignBottom) #坐标轴添加到图表,并指定方向
      self.__chart.addAxis(axisY,Qt.AlignLeft)

      series0.attachAxis(axisX)  #序列 series0 附加坐标轴
      series0.attachAxis(axisY)

      series1.attachAxis(axisX)  #序列 series1 附加坐标轴
      series1.attachAxis(axisY)
예제 #14
0
def getChart(title):
    chart = QChart(title=title)
    for i, data_list in enumerate(m_dataTable):
        series = QLineSeries(chart)
        for value, _ in data_list:
            series.append(*value)
        series.setName("Series " + str(i))
        chart.addSeries(series)
    chart.createDefaultAxes()  # 创建默认的轴
    return chart
예제 #15
0
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle("Demo12_1, QChart基本绘图")
        self.resize(580, 420)

        #创建chart和chartView
        chart = QChart()  #创建 Chart
        chart.setTitle("简单函数曲线")

        chartView = QChartView(self)  #创建 ChartView
        chartView.setChart(chart)  #Chart添加到ChartView
        self.setCentralWidget(chartView)

        #创建曲线序列
        series0 = QLineSeries()
        series1 = QLineSeries()
        series0.setName("Sin曲线")
        series1.setName("Cos曲线")
        chart.addSeries(series0)  #序列添加到图表
        chart.addSeries(series1)

        #序列添加数值
        t = 0
        intv = 0.1
        pointCount = 100
        for i in range(pointCount):
            y1 = math.cos(t)
            series0.append(t, y1)
            y2 = 1.5 * math.sin(t + 20)
            series1.append(t, y2)
            t = t + intv

##创建坐标轴
        axisX = QValueAxis()  #X 轴
        axisX.setRange(0, 10)  #设置坐标轴范围
        axisX.setTitleText("time(secs)")  #标题
        ##    axisX.setLabelFormat("%.1f")     #标签格式
        ##    axisX.setTickCount(11)           #主分隔个数
        ##    axisX.setMinorTickCount(4)
        ##    axisX.setGridLineVisible(false)

        axisY = QValueAxis()  #Y 轴
        axisY.setRange(-2, 2)
        axisY.setTitleText("value")
        ##    axisY.setTickCount(5)
        ##    axisY.setMinorTickCount(4)
        ##    axisY.setLabelFormat("%.2f")     #标签格式
        ##    axisY.setGridLineVisible(false)

        #为序列设置坐标轴
        chart.setAxisX(axisX, series0)  #为序列设置坐标轴
        chart.setAxisY(axisY, series0)

        chart.setAxisX(axisX, series1)  #为序列设置坐标轴
        chart.setAxisY(axisY, series1)
예제 #16
0
    def on_run_pb_clicked(self):
        self.chart.removeAllSeries()
        min_function = 421.0
        ga_answer = 0.0
        correct = 0
        incorrect = 0

        ga = Ga(self.population_sb.value(), self.crossover_dsb.value(),
                self.mutation_dsb.value(), self.generation_sb.value(),
                self.elitism_cb.isChecked())

        progress_dialog = QProgressDialog('Repetitions...', 'Cancel', 0,
                                          self.repetitions_sb.value(),
                                          self.window)
        progress_dialog.setWindowModality(Qt.WindowModal)
        ga_output = ()
        for i in range(self.repetitions_sb.value()):
            ga_output = ga.run_generation()
            ga_answer = ga_output[0]

            if ga_answer == min_function:
                correct += 1
            else:
                incorrect += 1
            progress_dialog.setValue(i)

            if progress_dialog.wasCanceled():
                break

        progress_dialog.setValue(self.repetitions_sb.value())

        if self.single_run_rb.isChecked():
            self.x_result_l.setText(str(ga_answer))
            self.fx_l.setText('{0:.2f}'.format(ga.calc_function(ga_answer)))
            if ga_answer == min_function:
                self.icon_result_l.setPixmap('correct-icon.png')
            else:
                self.icon_result_l.setPixmap('incorrect-icon.png')

            # Graph
            series_1 = QLineSeries()
            series_1.setName('Average Fit')
            series_2 = QLineSeries()
            series_2.setName('Best Fit')
            for i in range(len(ga_output[1])):
                series_1.append(ga_output[1][i], ga_output[2][i])
                series_2.append(ga_output[1][i], ga_output[3][i])
            self.chart.addSeries(series_1)
            self.chart.addSeries(series_2)
            self.chart.createDefaultAxes()

        else:
            self.correct_results_l.setText(str(correct))
            self.incorrect_results_l.setText(str(incorrect))
예제 #17
0
    def createSeries(self, dataArray):
        series = QLineSeries()
        for i in range(len(dataArray)):
            value = QPointF(i, dataArray[i][0])
            series.append(value)

        series.setColor(QColor(0, 255, 0))
        self.removeSeries()
        series.setName("灰度图")
        self.qchart.addSeries(series)

        self.lastSeries = series
예제 #18
0
    def __drawComparisonChart(self):
        self.__comparison_chart.removeAllSeries()
        series1 = QLineSeries(self)
        series2 = QLineSeries(self)
        series1.setName("Оптимальный")
        series2.setName("Другой")
        [(series1.append(i[0], i[1]), series2.append(i[0], i[2]))
         for i in self.__values]
        self.__comparison_chart.addSeries(series1)
        self.__comparison_chart.addSeries(series2)

        self.__comparison_chart.createDefaultAxes()
예제 #19
0
class ChartView(QChartView):
    def __init__(self):
        QChartView.__init__(self)
        #self.resize(300, 300)
        self.setRenderHint(QPainter.Antialiasing)  # 抗锯齿
        self.chart = QChart()
        self.seriesAcc = QLineSeries()
        self.seriesAcc.setName(CONF.leftUpNames[0])
        self.chart.addSeries(self.seriesAcc)
        #声明并初始化X轴,Y轴
        self.dtaxisX = QValueAxis()
        self.vlaxisY = QValueAxis()
        #设置坐标轴显示范围
        self.dtaxisX.setMin(0)
        #self.dtaxisX.setMax(100)
        self.vlaxisY.setMin(0)
        #self.vlaxisY.setMax(100)
        self.dtaxisX.setTickCount(3)
        self.vlaxisY.setTickCount(3)
        #设置坐标轴名称
        self.dtaxisX.setTitleText(CONF.leftUpNames[1])
        self.vlaxisY.setTitleText(CONF.leftUpNames[2])
        #设置网格不显示
        self.vlaxisY.setGridLineVisible(False)
        #把坐标轴添加到chart中
        self.chart.addAxis(self.dtaxisX, Qt.AlignBottom)
        self.chart.addAxis(self.vlaxisY, Qt.AlignLeft)

        self.seriesAcc.attachAxis(self.dtaxisX)
        self.seriesAcc.attachAxis(self.vlaxisY)

        self.initUI()

    def initUI(self):
        self.backend = BackendThread()
        self.backend.update_line.connect(self.handleLine)
        self.backend.start()

    def handleLine(self, data):
        if data[0] == 0:
            self.seriesAcc.clear()
        else:
            self.dtaxisX.setMax(data[0])
            self.vlaxisY.setMax(data[0])
            self.seriesAcc.clear()
            self.seriesAcc.append(0, 0)
            self.seriesAcc.append(data[0], data[1])

        self.setChart(self.chart)
예제 #20
0
    def add_data(self, xdata, ydata, color=None, legend_text=None):
        curve = QLineSeries()
        pen = curve.pen()
        if color is not None:
            pen.setColor(color)
        pen.setWidthF(1.5)

        curve.setPen(pen)
        # curve.setPointsVisible(True)

        # curve.setUseOpenGL(True)

        self.total_samples = max(self.total_samples, len(xdata))

        # Decimate
        xdecimated, ydecimated = self.decimate(xdata, ydata)

        # Data must be in ms since epoch
        # curve.append(self.series_to_polyline(xdecimated * 1000.0, ydecimated))
        # self.reftime = datetime.datetime.fromtimestamp(xdecimated[0])

        # if len(xdecimated) > 0:
        #    xdecimated = xdecimated - xdecimated[0]

        xdecimated *= 1000  # No decimal expected
        points = []
        for i, _ in enumerate(xdecimated):
            # TODO hack
            # curve.append(QPointF(xdecimated[i], ydecimated[i]))
            points.append(QPointF(xdecimated[i], ydecimated[i]))

        curve.replace(points)
        points.clear()

        if legend_text is not None:
            curve.setName(legend_text)

        # Needed for mouse events on series
        self.chart.setAcceptHoverEvents(True)
        self.xvalues[self.ncurves] = np.array(xdecimated)

        # connect signals / slots
        # curve.clicked.connect(self.lineseries_clicked)
        # curve.hovered.connect(self.lineseries_hovered)

        # Add series
        self.chart.addSeries(curve)
        self.ncurves += 1
        self.update_axes()
예제 #21
0
 def initChart(self):
     self._chart = QChart(title="折线图堆叠")
     self._chart.setAcceptHoverEvents(True)
     # Series动画
     self._chart.setAnimationOptions(QChart.SeriesAnimations)
     dataTable = [["邮件营销", [120, 132, 101, 134, 90, 230, 210]],
                  ["联盟广告", [220, 182, 191, 234, 290, 330, 310]],
                  ["视频广告", [150, 232, 201, 154, 190, 330, 410]],
                  ["直接访问", [320, 332, 301, 334, 390, 330, 320]],
                  ["搜索引擎", [820, 932, 901, 934, 1290, 1330, 1320]]]
     for series_name, data_list in dataTable:
         series = QLineSeries(self._chart)
         for j, v in enumerate(data_list):
             series.append(j, v)
         series.setName(series_name)
         series.setPointsVisible(True)  # 显示圆点
         series.hovered.connect(self.handleSeriesHoverd)  # 鼠标悬停
         self._chart.addSeries(series)
     self._chart.createDefaultAxes()  # 创建默认的轴
     axisX = self._chart.axisX()  # x轴
     axisX.setTickCount(7)  # x轴设置7个刻度
     axisX.setGridLineVisible(False)  # 隐藏从x轴往上的线条
     axisY = self._chart.axisY()
     axisY.setTickCount(7)  # y轴设置7个刻度
     axisY.setRange(0, 1500)  # 设置y轴范围
     # 自定义x轴
     axis_x = QCategoryAxis(
         self._chart,
         labelsPosition=QCategoryAxis.AxisLabelsPositionOnValue)
     axis_x.setTickCount(7)
     axis_x.setGridLineVisible(False)
     min_x = axisX.min()
     max_x = axisX.max()
     step = (max_x - min_x) / (7 - 1)  # 7个tick
     for i in range(0, 7):
         axis_x.append(self.category[i], min_x + i * step)
     self._chart.setAxisX(axis_x, self._chart.series()[-1])
     # self._chart.addAxis(axis_x, Qt.AlignBottom)
     # chart的图例
     legend = self._chart.legend()
     # 设置图例由Series来决定样式
     legend.setMarkerShape(QLegend.MarkerShapeFromSeries)
     # 遍历图例上的标记并绑定信号
     for marker in legend.markers():
         # 点击事件
         marker.clicked.connect(self.handleMarkerClicked)
         # 鼠标悬停事件
         marker.hovered.connect(self.handleMarkerHovered)
     self.setChart(self._chart)
예제 #22
0
    def createLineChart(self):
        chart = QChart()
        chart.setTitle("Line chart")

        for i, data_list in enumerate(self.m_dataTable):
            series = QLineSeries(chart)
            for value, _ in data_list:
                series.append(value)

            series.setName("Series " + str(i))
            chart.addSeries(series)

        chart.createDefaultAxes()

        return chart
 def add_data(self, data, chart, color=None):
     curve = QLineSeries(chart)
     curve.setName("latency")
     pen = curve.pen()
     if color is not None:
         pen.setColor(color)
     pen.setWidthF(1)
     curve.setPen(pen)
     curve.setUseOpenGL(True)
     for x in data:
         curve.append(x[0], x[1])
     # curve.append(series_to_polyline(xdata, ydata))
     chart.addSeries(curve)
     chart.createDefaultAxes()
     return curve
예제 #24
0
    def createLineChart(self):
        chart = QChart()
        chart.setTitle("Line chart")

        for i, data_list in enumerate(self.m_dataTable):
            series = QLineSeries(chart)
            for value, _ in data_list:
                series.append(value)

            series.setName("Series " + str(i))
            chart.addSeries(series)

        chart.createDefaultAxes()

        return chart
예제 #25
0
def XLineSeries(data_dict, key_order=None, xkey = None, openGL=False):
    if key_order == None:
        key_order = data_dict.keys()

    series = []
    if xkey == None:
        xkey = list(key_order)[0]
    for key in key_order-xkey:
        set = QLineSeries(); set.setName(key)
        if openGL:
            set.setUseOpenGL(True)        
        for i, (itemx, itemy) in enumerate(zip_longest(data_dict[xkey],data_dict[key])):
            set.append(itemx, itemy)

        series.append(set)
    return series
예제 #26
0
파일: main_ui.py 프로젝트: rajabiy/res_man
    def rewrite_data(self, args):

        self.layout = QVBoxLayout()
        self.grid.addLayout(self.layout, 0, 0, 1, 1)
        for key, value in self.data[args].items():
            chart = QChart()
            chart_view = QChartView(chart)
            series = QLineSeries()
            series.setName(key)

            for i in value:
                series.append(QPointF(i[0], i[1]))

            chart.addSeries(series)
            chart.createDefaultAxes()
            self.layout.addWidget(chart_view)
예제 #27
0
파일: history.py 프로젝트: janonoly/exampc
    def create_series(self, dataTable, chart):
        # 创建折线的函数
        for i, data_list in enumerate(dataTable):  # [index,[list]]
            # 创建曲线
            series = QLineSeries(chart._chart)
            # 设置折线名
            series.setName(data_list[0])

            for j, v in enumerate(data_list[1:]):
                #  添加折线和对应的坐标点
                series.append(j, v)

            series.setPointsVisible(True)  # 显示原点
            # 鼠标悬停连接事件
            series.hovered.connect(self.onSeriesHoverd)
            chart._chart.addSeries(series)  # 添加折线到视图窗口
        return chart._chart
예제 #28
0
    def addSeries(
            self, _x2idx: typing.Dict, _idx2x: list, _chart: QChart,
            _axis_x: QValueAxis, _axis_y: QValueAxis
    ):
        series = QLineSeries()
        series.setName(self.name)
        for x, y in zip(self.x_list, self.y_list):
            series.append(_x2idx[x], y)
        if self.color is not None:
            series.setColor(self.color)

        _chart.addSeries(series)
        _chart.setAxisX(_axis_x, series)
        _chart.setAxisY(_axis_y, series)

        if self.show_value:
            self.createShow()
예제 #29
0
 def __getSerie(self, serie=None):
     if not serie or not isinstance(serie, dict):
         return None
     types = serie.get("type", "") or ""
     data = serie.get("data", []) or []
     if not data or not isinstance(data, list):
         return None
     if types == "line":
         _series = QLineSeries(self._chart)
     else:
         return None
     # 设置series名字
     _series.setName(serie.get("name", "") or "")
     # 添加数据到series中
     for index, value in enumerate(data):
         # 保证vlaue必须是数字
         _series.append(index, value if type(value) in (int, float) else 0)
     return _series
예제 #30
0
    def __drawBode(self):
        self.chart.removeAllSeries()  #删除所有序列
        ## 创建序列
        pen = QPen(Qt.red)
        pen.setWidth(2)

        seriesMag = QLineSeries()  #幅频曲线序列
        seriesMag.setName("幅频曲线")
        seriesMag.setPen(pen)
        seriesMag.setPointsVisible(False)
        seriesMag.hovered.connect(self.do_seriesMag_hovered)

        seriesPhase = QLineSeries()  #相频曲线序列
        pen.setColor(Qt.blue)
        seriesPhase.setName("相频曲线")
        seriesPhase.setPen(pen)
        seriesPhase.setPointsVisible(True)
        seriesPhase.hovered.connect(self.do_seriesPhase_hovered)

        ## 为序列添加数据点
        count = len(self.__vectW)  #数据点数
        for i in range(count):
            seriesMag.append(self.__vectW[i], self.__vectMag[i])
            seriesPhase.append(self.__vectW[i], self.__VectPhase[i])

    ##设置坐标轴范围
        minMag = min(self.__vectMag)
        maxMag = max(self.__vectMag)
        minPh = min(self.__VectPhase)
        maxPh = max(self.__VectPhase)
        self.__axisMag.setRange(minMag, maxMag)
        self.__axisPhase.setRange(minPh, maxPh)

        ##序列添加到chart,并指定坐标轴
        self.chart.addSeries(seriesMag)
        seriesMag.attachAxis(self.__axisFreq)
        seriesMag.attachAxis(self.__axisMag)

        self.chart.addSeries(seriesPhase)
        seriesPhase.attachAxis(self.__axisFreq)
        seriesPhase.attachAxis(self.__axisPhase)

        for marker in self.chart.legend().markers():  #QLegendMarker类型列表
            marker.clicked.connect(self.do_LegendMarkerClicked)
예제 #31
0
class PeersCountGraphView(BaseTimedGraph):
    peersCountFetched = AsyncSignal(int)

    def __init__(self, parent=None):
        super(PeersCountGraphView, self).__init__(parent=parent)

        self.setObjectName('PeersCountGraph')
        self.peersCountFetched.connectTo(self.onPeersCount)
        self.axisY.setTitleText(iPeers())

        pen = QPen(QColor('#60cccf'))
        pen.setWidth(2)

        self.seriesPeers = QLineSeries()
        self.seriesPeers.setName('Peers')
        self.seriesPeers.setPen(pen)
        self.chart.addSeries(self.seriesPeers)
        self.seriesPeers.attachAxis(self.axisX)
        self.seriesPeers.attachAxis(self.axisY)

        self.setChart(self.chart)

    async def onPeersCount(self, count):
        dtNow = QDateTime.currentDateTime()
        dtMsecs = dtNow.toMSecsSinceEpoch()

        delta = 120 * 1000
        if not self.seriesPurgedT or (dtMsecs - self.seriesPurgedT) > delta:
            self.removeOldSeries(self.seriesPeers, dtMsecs - delta)
            self.seriesPurgedT = dtMsecs

        peersVector = self.seriesPeers.pointsVector()
        values = [p.y() for p in peersVector]

        if values:
            self.axisY.setMax(max(values) + 10)
            self.axisY.setMin(min(values) - 10)

        dateMin = QDateTime.fromMSecsSinceEpoch(dtMsecs - (30 * 1000))
        dateMax = QDateTime.fromMSecsSinceEpoch(dtMsecs + 2000)

        self.seriesPeers.append(dtMsecs, count)
        self.axisX.setRange(dateMin, dateMax)