Ejemplo n.º 1
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)
Ejemplo n.º 2
0
    def set_x_aix(self, years: []) -> QValueAxis:  # x轴坐标——年份
        x_aix = QValueAxis()
        x_aix.setRange(years[0], years[-1])
        x_aix.setLabelFormat('%d')
        x_aix.setGridLineVisible(True)
        x_aix.setTickCount(len(years))
        x_aix.setMinorTickCount(5)  # 每两个月一个小分级

        return x_aix
Ejemplo n.º 3
0
    def __createChart(self):
        self.__chart = QChart()
        self.ui.chartView.setChart(self.__chart)
        self.__chart.legend().setVisible(False)  #隐藏图例
        self.__chart.setMargins(QMargins(0, 0, 0, 0))  #把间距设置到最小

        #初始化线条数组
        series = [QLineSeries() for _ in range(15)]
        color = [
            '#FF88C2', '#FF8888', '#FFA488', '#FFBB66', '#FFDD55', '#FFFF77',
            '#DDFF77', '#BBFF66', '#66FF66', '#77FFCC', '#77FFEE', '#66FFFF',
            '#77DDFF', '#99BBFF', '#9999FF'
        ]

        #设置线条颜色形状
        pen = QPen()
        pen.setStyle(Qt.SolidLine)
        pen.setWidth(2)
        for i in range(15):
            pen.setColor(QColor(color[i]))
            series[i].setPen(pen)

        #向表格添加线条
        for i in range(15):
            self.__chart.addSeries(series[i])

        #设置坐标轴
        axisX = QValueAxis()
        #self.__curAxis=axisX       #当前坐标轴
        axisX.setRange(0, 200)  #设置坐标轴范围
        axisX.setLabelFormat("%d")  #标签格式
        axisX.setTickCount(5)  #主分隔个数
        axisX.setMinorTickCount(4)
        axisX.setGridLineVisible(True)
        axisX.setMinorGridLineVisible(False)

        axisY = QValueAxis()
        axisY.setRange(0, 1024)
        axisY.setLabelFormat("%d")  #标签格式
        axisY.setTickCount(5)
        axisY.setMinorTickCount(4)
        axisY.setGridLineVisible(True)
        axisY.setMinorGridLineVisible(False)

        self.__chart.addAxis(axisX, Qt.AlignBottom)  #坐标轴添加到图表,并指定方向
        self.__chart.addAxis(axisY, Qt.AlignLeft)

        for i in range(15):
            series[i].attachAxis(axisX)
            series[i].attachAxis(axisY)
Ejemplo n.º 4
0
    def set_y_aix(self, areas: []) -> QValueAxis:  # y轴坐标——面积
        ma = []
        for i in range(0, len(areas)):
            m = max(areas[i])
            ma.append(m)
        bound = max(ma)

        y_aix = QValueAxis()
        y_aix.setRange(0, int(bound))
        y_aix.setLabelFormat('%d')
        y_aix.setGridLineVisible(True)
        y_aix.setTickCount(11)
        y_aix.setMinorTickCount(4)

        return y_aix
Ejemplo n.º 5
0
    def grafik_uji_kategori(self):
        with open(
                'C:/Users/asus/Desktop/SKRIPSWEET BISMILLAH/MODUL PROGRAM/Modul Program Bismillah/Pengujian/hasil_uji_kategori_kfold.json'
        ) as f:
            dataa = json.load(f)
        print(dataa)
        acc = dataa['acc']
        pres = dataa['presisi']
        rec = dataa['recall']
        set0 = QBarSet('Akurasi')
        set1 = QBarSet('Presisi')
        set2 = QBarSet('Recall')

        for i in range(len(acc)):
            set0.append(acc[i] * 100)

        for i in range(len(pres)):
            set1.append(pres[i] * 100)

        for i in range(len(rec)):
            set2.append(rec[i] * 100)

        series = QBarSeries()
        series.append(set0)
        series.append(set1)
        series.append(set2)
        set0.setColor(QtGui.QColor("navy"))
        set1.setColor(QtGui.QColor("yellow"))
        set2.setColor(QtGui.QColor("red"))

        chart = QChart()
        chart.addSeries(series)
        chart.setAnimationOptions(QChart.SeriesAnimations)
        label_pantai = ['K=1', 'K=2', 'K=3', 'K=4', 'K=5']
        axisX = QBarCategoryAxis()
        axisX.append(label_pantai)
        axisX.setLabelsAngle(0)
        axisY = QValueAxis()
        axisX.setTitleText("K-Fold Cross Validation")
        axisY.setTitleText("Prosentase (%)")
        axisY.setRange(0, max(set0))
        axisY.setMinorTickCount(5)

        chart.addAxis(axisX, Qt.AlignBottom)
        chart.addAxis(axisY, Qt.AlignLeft)
        chart.legend().setVisible(True)
        chart.legend().setAlignment(Qt.AlignBottom)
        return (chart)
Ejemplo n.º 6
0
class CpuLineChart(QChart):

    def __init__(self, *args, **kwargs):
        super(CpuLineChart, self).__init__(*args, **kwargs)
        self.m_count = 10
        # 隐藏图例
        self.legend().hide()
        self.m_series = QSplineSeries(self)
        # 设置画笔
        self.m_series.setPen(QPen(QColor('#3B8CFF'), 2, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
        self.addSeries(self.m_series)
        # x轴
        self.m_axisX = QDateTimeAxis(self)
        self.m_axisX.setTickCount(self.m_count + 1)  # 设置刻度数量
        self.m_axisX.setFormat('hh:mm:ss')  # 设置时间显示格式
        now = QDateTime.currentDateTime()  # 前10秒到现在
        self.m_axisX.setRange(now.addSecs(-self.m_count), now)
        self.addAxis(self.m_axisX, Qt.AlignBottom)
        self.m_series.attachAxis(self.m_axisX)
        # y轴
        self.m_axisY = QValueAxis(self)
        self.m_axisY.setLabelFormat('%d')  # 设置文本格式
        self.m_axisY.setMinorTickCount(4)  # 设置小刻度线的数目
        self.m_axisY.setTickCount(self.m_count + 1)
        self.m_axisY.setRange(0, 100)
        self.addAxis(self.m_axisY, Qt.AlignLeft)
        self.m_series.attachAxis(self.m_axisY)

        # 填充11个初始点,注意x轴 需要转为秒的时间戳
        self.m_series.append(
            [QPointF(now.addSecs(-i).toMSecsSinceEpoch(), 0) for i in range(self.m_count, -1, -1)])

        # 定时器获取数据
        self.m_timer = QTimer()
        self.m_timer.timeout.connect(self.update_data)
        self.m_timer.start(1000)

    def update_data(self):
        value = cpu_percent()
        now = QDateTime.currentDateTime()
        self.m_axisX.setRange(now.addSecs(-self.m_count), now)  # 重新调整x轴的时间范围
        # 获取原来的所有点,去掉第一个并追加新的一个
        points = self.m_series.pointsVector()
        points.pop(0)
        points.append(QPointF(now.toMSecsSinceEpoch(), value))
        # 替换法速度更快
        self.m_series.replace(points)
Ejemplo n.º 7
0
    def __init__(self,
                 series: QLineSeries,
                 title: str,
                 xTitle: str,
                 yTitle: str,
                 minimumSize=QSize(400, 400),
                 y_range=None,
                 allowZoom=True,
                 allowPan=True,
                 niceNumbers=True,
                 showPoints=True,
                 *args):
        super().__init__(*args)

        self.allowZoom = allowZoom
        self.allowPan = allowPan
        self.niceNumbers = niceNumbers
        self.showPoints = showPoints

        self.guidesEnabled = True
        self.coords = QPoint(0, 0)

        if y_range:
            self.y_range = y_range
            self.y_range_fixed = True
        else:
            self.y_range_fixed = False

        self.setRubberBand(QChartView.HorizontalRubberBand)

        chart = QChart()
        # chart.setTitle(title)

        axisX = QValueAxis(chart)
        # axisX.setTitleText(xTitle)
        axisX.setMinorTickCount(1)
        axisX.setTickCount(20)
        chart.setAxisX(axisX)

        axisY = QValueAxis(chart)
        # axisY.setTitleText(yTitle)
        axisY.setTickCount(10)
        chart.setAxisY(axisY)

        chart.legend().hide()
        # chart.legend().setAlignment(Qt.AlignBottom)

        self.setChart(chart)

        self.set_series(series)

        if minimumSize:
            self.setMinimumSize(minimumSize)
        self.setRenderHint(QPainter.Antialiasing)

        if self.allowPan:
            self.pan = Pan(self)

        self.keyPressActions = {}
        if self.allowZoom:
            self.keyPressActions[Qt.Key_Plus] = self.zoom_in
            self.keyPressActions[Qt.Key_Minus] = self.zoom_out
            self.keyPressActions[Qt.Key_Space] = self.zoom_reset
        if self.allowPan:
            self.keyPressActions[
                Qt.Key_Left] = lambda e: self.chart().scroll(-10, 0)
            self.keyPressActions[
                Qt.Key_Right] = lambda e: self.chart().scroll(10, 0)
            self.keyPressActions[
                Qt.Key_Up] = lambda e: self.chart().scroll(0, 10)
            self.keyPressActions[
                Qt.Key_Down] = lambda e: self.chart().scroll(0, -10)
Ejemplo n.º 8
0
class Demo(QWidget,QFont):
    def __init__(self):
        super(Demo,self).__init__()     #子类调用父类的方法
        self.BuildUI()                  #构造界面
        self.CreatChart()               #创建曲线
        self.connection()

##==============自定义功能函数============
    def BuildUI(self):   ##构造界面
        self.resize(800, 600)
        self.setFont(QFont("黑体", 10.5))  ##设置字体
        self.setWindowTitle("水工标准设计反应谱v1.1(Hs小毕)")  ##s设置窗口标题
        self.setWindowIcon(QIcon(':/fyp.ico'))

        # 定义控件
        #定义“输入”控件===========================
        self.label1 = QLabel("水工建筑物类型", self)
        # 标准设计反应谱最大值的代表值
        BEITA = ["土石坝", "重力坝", "拱坝", "水闸|进水塔|边坡|其他"]
        self.comboBox1 = QComboBox()
        self.comboBox1.addItems(BEITA)
        self.comboBox1.setCurrentIndex(1)  # 设置默认值
        self.label2 = QLabel("特征周期Tg(s)", self)
        self.line2 = QLineEdit()
        self.line2.setPlaceholderText("单位(s)")
        self.label3 = QLabel("加速度幅值A(g)", self)
        self.line3 = QLineEdit()
        self.line3.setPlaceholderText("单位(g)")
        self.groupbox_1 = QGroupBox('输入数据', self)
        self.v_layout = QVBoxLayout()
        self.v_layout.addWidget(self.label1)
        self.v_layout.addWidget(self.comboBox1)
        self.v_layout.addWidget(self.label2)
        self.v_layout.addWidget(self.line2)
        self.v_layout.addWidget(self.label3)
        self.v_layout.addWidget(self.line3)
        self.groupbox_1.setLayout(self.v_layout)

        #定义“生成”控件===========================
        self.v1_layout = QVBoxLayout()
        self.groupbox_2 = QGroupBox('生成曲线', self)
        self.button1 = QPushButton("生成曲线",self)
        self.v1_layout.addWidget(self.button1)
        self.groupbox_2.setLayout(self.v1_layout)

        #定义“输出单位”控件
        self.groupbox_3 = QGroupBox('输出单位', self)
        self.h_layout = QHBoxLayout()
        self.unit_g = QRadioButton('g', self)
        self.unit_g.setChecked(True)                #设置单位“g”为默认
        self.unit_m = QRadioButton('m/sec2', self)
        self.unit_mm = QRadioButton('mm/sec2', self)
        self.h_layout.addWidget(self.unit_g)
        self.h_layout.addWidget(self.unit_m)
        self.h_layout.addWidget(self.unit_mm)
        self.groupbox_3.setLayout(self.h_layout)
        #定义输出的列数
        self.groupbox_4 = QGroupBox('输出列数', self)
        self.h1_layout = QHBoxLayout()
        self.list2 = QRadioButton('时间|谱值')
        self.list2.setChecked(True)  # 设置时间|谱值为默认
        self.list1 = QRadioButton('谱值')
        self.h1_layout.addWidget(self.list2)
        self.h1_layout.addWidget(self.list1)
        self.groupbox_4.setLayout(self.h1_layout)
        #输出时间间隔
        self.groupbox_5 = QGroupBox('输出时间间隔(s)', self)
        self.v2_layout = QHBoxLayout()
        self.Dtime = QRadioButton('0.01')
        self.Dtime.setChecked(True)  # 设置0.01s为默认
        self.Dtime_Edit = QLineEdit()
        self.Dtime1 = QRadioButton(self.Dtime_Edit)
        self.v2_layout.addWidget(self.Dtime)
        self.v2_layout.addWidget(self.Dtime1)
        self.v2_layout.addWidget(self.Dtime_Edit)
        self.groupbox_5.setLayout(self.v2_layout)
        #定义输出的文件选择
        self.groupbox_6 = QGroupBox('输出文件', self)
        self.v3_layout = QVBoxLayout()
        self.h3_layout = QHBoxLayout()
        self.Enter = QPushButton('点击输出',self)
        self.out_line=QLineEdit()
        self.out_select=QPushButton('浏览',self)
        self.h3_layout.addWidget(self.out_line)
        self.h3_layout.addWidget(self.out_select)
        self.v3_layout.addLayout(self.h3_layout)
        self.v3_layout.addWidget(self.Enter)
        self.groupbox_6.setLayout(self.v3_layout)

        # 定义绘图控件===========================
        self.chartView = QChartView()  # 创建 ChartView
        self.v6_layout = QVBoxLayout()
        self.v6_layout.addWidget(self.groupbox_1)
        self.v6_layout.addWidget(self.groupbox_2)
        self.v6_layout.addWidget(self.groupbox_3)
        self.v6_layout.addWidget(self.groupbox_4)
        self.v6_layout.addWidget(self.groupbox_5)
        self.v6_layout.addWidget(self.groupbox_6)

        self.h4_layout = QHBoxLayout()
        self.h4_layout.addLayout(self.v6_layout)
        self.h4_layout.addWidget(self.chartView)
        self.setLayout(self.h4_layout)

    def CreatChart(self):
        self.chart = QChart()  # 创建 Chart
        self.chart.setTitle("反应谱曲线")
        self.chartView.setChart(self.chart)  # Chart添加到ChartView
        # 创建曲线序列
        self.series0 = QLineSeries()
        self.chart.addSeries(self.series0)  # 序列添加到图表
        self.chart.createDefaultAxes()
        ##创建坐标轴
        self.axisX = QValueAxis()  # X 轴
        self.axisX.setTitleText("T(s)")  # 标题
        self.axisX.setLabelFormat("%.1f")     #标签格式
        self.axisX.setTickCount(5)           #主分隔个数
        self.axisX.setMinorTickCount(4)
        self.axisY=QValueAxis()  # Y 轴
        self.axisY.setTitleText("Se/g")
        self.axisY.setTickCount(5)
        self.axisY.setMinorTickCount(4)
        self.axisY.setLabelFormat("%.2f")     #标签格式
        # 为序列设置坐标轴
        self.chart.setAxisX(self.axisX, self.series0)  # 为序列设置坐标轴
        self.chart.setAxisY(self.axisY, self.series0)

    def PrepareData(self):
        """
        定义绘图中的数据
        """
        # 序列添加数值
        Str_dict={"土石坝":1.6, "重力坝":2, "拱坝":2.5, "水闸|进水塔|边坡|其他":2.25}
        Str_list =self.comboBox1.currentText()
        BETA_Data = Str_dict[Str_list]
        # 特征周期
        TG = float(self.line2.text())
        # 加速度幅值
        PGA = float(self.line3.text())
        t = 0
        intv = 0.01
        pointCount = 301
        self.series0.clear()   #清楚数据========
        for T in range(pointCount):
            T= round(T * intv,2)
            if T <= 0.1:
                y1 = (BETA_Data-1)/(0.1-0)*T+1
            elif 0.1<T and T <= TG:
                y1= BETA_Data
            else:
                y1 = BETA_Data*(TG/T)**0.6
            y1 = y1 * PGA
            self.series0.append(T, y1)
        #设置坐标轴范围=========================
        self.axisX.setRange(0,3)
        self.axisY.setRange(0,BETA_Data*PGA+1)

    def outputfilename(self):
        """
        定义输出路径
        """
        dlg = QFileDialog()
        filt = "Srf Files(*.Srf);;Text Files (*.txt);;All Files (*)"
        fileName, _ =dlg.getSaveFileName(self, "另存为文件", ".",filt)
        self.out_line.setText(fileName)

    def Output_Data(self):
        """
        定义输出的数据
        """
        # 序列添加数值
        Str_dict={"土石坝":1.6, "重力坝":2, "拱坝":2.5, "水闸|进水塔|边坡|其他":2.25}
        Str_list =self.comboBox1.currentText()
        BETA_Data = Str_dict[Str_list]
        # 特征周期
        TG = float(self.line2.text())
        # 加速度幅值
        PGA = float(self.line3.text())
        # 输出单位
        if self.unit_g.isChecked()==True:
            UNIT = 1
        elif self.unit_g.isChecked()==True:
            UNIT = 9.81
        else:
            UNIT = 9810
        # 输出间隔
        if self.Dtime.isChecked()==True:
            intv = 0.01
        else:
            intv = float(self.Dtime_Edit.text())
        pointCount = 301
        fileNameout = QLineEdit.text(self.out_line)
        with open(fileNameout, 'w', encoding='gbk') as f_out:
            for T in range(pointCount):
                T = round(T * intv, 2)
                if T <= 0.1:
                    y1 = (BETA_Data - 1) / (0.1 - 0) * T + 1
                elif 0.1 < T and T <= TG:
                    y1 = BETA_Data
                else:
                    y1 = BETA_Data * (TG / T) ** 0.6
                y1 = y1 * PGA * UNIT
                if self.list2.isChecked()==True:
                    f_out.write(f"{T}\t\t{y1}\n")
                else:
                    f_out.write(f"{y1}\n")
    def connection(self):
        """
        槽函数
        """
        self.button1.clicked.connect(lambda: self.PrepareData())
        self.out_select.clicked.connect(lambda: self.outputfilename())
        self.Enter.clicked.connect(lambda: self.Output_Data())
Ejemplo n.º 9
0
class Chart(QChartView):
    def __init__(self):
        self.chart = QChart()

        QChartView.__init__(self, self.chart)

        self.axisX = QValueAxis()
        self.axisY = QValueAxis()

        self.xRange = [0, 100]
        self.yRange = [-100, 100]

        self.curve = []
        self.scatterCurve = []

        self.setBackgroundBrush(QColor('#D8D8D8'))

        self.setRenderHint(QPainter.Antialiasing)
        self.chart.setAnimationOptions(QChart.NoAnimation)
        self.chart.legend().setVisible(True)
        self.chart.legend().setAlignment(Qt.AlignBottom)
        self.chart.legend().setLabelColor(Qt.white)
        self.chart.legend().setMarkerShape(QLegend.MarkerShapeFromSeries)
        self.chart.setBackgroundBrush(QColor('#00004D'))

        penAxisGrid = QPen(QColor('#F2F2F2'))
        penAxisGrid.setWidthF(0.5)
        penAxisMinorGrid = QPen(QColor('#A4A4A4'))
        penAxisMinorGrid.setWidthF(0.3)

        self.axisX.setGridLinePen(penAxisGrid)
        self.axisX.setLinePen(penAxisGrid)
        self.axisY.setGridLinePen(penAxisGrid)
        self.axisY.setLinePen(penAxisGrid)

        self.axisX.setMinorGridLinePen(penAxisMinorGrid)
        self.axisY.setMinorGridLinePen(penAxisMinorGrid)

        self.axisX.setLabelsColor(Qt.white)
        self.axisY.setLabelsColor(Qt.white)

        self.axisX.setMinorTickCount(4)
        self.axisY.setMinorTickCount(4)

        self.axisX.setTitleBrush(Qt.white)
        self.axisY.setTitleBrush(Qt.white)

        self.axisX.setTitleText('Time')
        self.axisY.setTitleText('Signal Amplitude')

        self.axisX.setTickCount(11)
        self.axisY.setTickCount(11)
        self.axisX.setRange(self.xRange[0], self.xRange[1])
        self.axisY.setRange(self.yRange[0], self.yRange[1])

    def setAddSerie(self, name, color):
        self.curve.append(QLineSeries())
        pen = self.curve[len(self.curve) - 1].pen()

        pen.setColor(QColor(color))
        pen.setWidthF(2)
        self.curve[len(self.curve) - 1].setPen(pen)

        self.curve[len(self.curve) - 1].setName(name)

        self.chart.addSeries(self.curve[len(self.curve) - 1])

        self.chart.setAxisX(self.axisX, self.curve[len(self.curve) - 1])
        self.chart.setAxisY(self.axisY, self.curve[len(self.curve) - 1])

    def setAddScatterSerie(self, color):
        self.scatterCurve.append(QScatterSeries())

        pen = self.scatterCurve[len(self.scatterCurve) - 1].pen()
        pen.setColor(QColor(color))
        pen.setWidthF(1)
        self.scatterCurve[len(self.scatterCurve) - 1].setPen(pen)
        self.scatterCurve[len(self.scatterCurve) - 1].setColor(QColor(color))
        self.scatterCurve[len(self.scatterCurve) - 1].setMarkerSize(10)

        self.chart.addSeries(self.scatterCurve[len(self.scatterCurve) - 1])

        self.chart.setAxisX(self.axisX,
                            self.scatterCurve[len(self.scatterCurve) - 1])
        self.chart.setAxisY(self.axisY,
                            self.scatterCurve[len(self.scatterCurve) - 1])

    def setDataChartScatter(self, xData, yData1, yData2):
        if xData > self.xRange[1]:
            addValue = xData - self.xRange[1]

            if self.xRange[0] is not 0:
                self.xRange[0] = self.xRange[0] + addValue

            self.xRange[1] = self.xRange[1] + addValue
            self.axisX.setRange(self.xRange[0], self.xRange[1])

        self.curve[0].append(xData, yData1)
        self.curve[1].append(xData, yData2)
        self.scatterCurve[0].append(xData, yData1)
        self.scatterCurve[1].append(xData, yData2)

    def setDataChart(self, xData, yData1, yData2):
        if xData > self.xRange[1]:
            addValue = xData - self.xRange[1]

            if self.xRange[0] is not 0:
                self.xRange[0] = self.xRange[0] + addValue

            self.xRange[1] = self.xRange[1] + addValue
            self.axisX.setRange(self.xRange[0], self.xRange[1])

        self.curve[0].append(xData, yData1)
        self.curve[1].append(xData, yData2)

    def setRangeY(self, yRange, autoscale):
        if autoscale:

            if yRange[0] == 0 and yRange[1] == 0:
                yRange[0] = -0.50
                yRange[1] = 0.50

            elif yRange[0] == 0:
                yRange[0] = -0.10
                yRange[1] = yRange[1] * 1.10

            elif yRange[1] == 0:
                yRange[0] = yRange[0] * 1.10
                yRange[1] = 0.10

            else:

                if yRange[0] < 0:
                    yRange[0] = yRange[0] * 1.10

                else:
                    yRange[0] = yRange[0] - (yRange[0] * 0.10)

                if yRange[1] < 0:
                    yRange[1] = yRange[1] - (yRange[1] * 0.10)

                else:
                    yRange[1] = yRange[1] * 1.10

            self.axisY.setRange(yRange[0], yRange[1])

        else:
            self.axisY.setRange(yRange[0], yRange[1])

    def setRangeX(self, xRange):
        self.axisX.setRange(xRange[0], xRange[1])

    def getRangeX(self):
        return self.xRange

    def setAxisXName(self, name):
        self.axisX.setTitleText(name)

    def setAxisYName(self, name):
        self.axisY.setTitleText(name)

    def setAxisXTickCount(self, tick):
        self.axisX.setTickCount(tick)

    def setAxisYTickCount(self, tick):
        self.axisY.setTickCount(tick)

    def initSerie(self):
        self.curve.clear()

    def initSeries(self):
        self.curve[0].clear()
        self.curve[1].clear()
Ejemplo n.º 10
0
class ChartView(QChartView,QChart):
    data_updated= pyqtSignal()
    def __init__(self, *args,**kwargs):
        s_key = kwargs["s_key"]
        kwargs.pop("s_key")
        super(ChartView, self).__init__(*args, **kwargs)
        self.setRenderHint(QPainter.Antialiasing)  # 抗锯齿
        self.q_point={}
        self.chart_init(s_key)
        #self.timer_init()

    def set_button(self,comboBox,checkbox):
        self.comboBox= comboBox
        self.checkbox = checkbox
        self.comboBox.currentIndexChanged.connect(self.set_yaxis_range)
        self.checkbox.stateChanged.connect(self.set_yaxis_range)
        self.set_yaxis_range()

    def set_yaxis_range(self):
        max_v = float(self.comboBox.currentText())
        min_v = -max_v
        fromzero = self.checkbox.isChecked()
        if fromzero:
            min_v = 0
        self.y_Aix.setMin(min_v)
        self.y_Aix.setMax(max_v)

    def add_data(self,k,point):
        """
        point:[sow,value]
        """
        sow,value = point
        cur_t  = sow2datetime(sow)
        cur_time = QDateTime().fromSecsSinceEpoch(cur_t.timestamp())
        self.series_list[k].append(cur_time.toMSecsSinceEpoch(),value)

        if self.series_list[k].count() > 2700:
            self.series_list[k].removePoints(0,self.series_list[k].count()-2700)
        min_time = QDateTime().fromMSecsSinceEpoch(self.series_list[k].at(0).x())
        max_time = cur_time.addSecs(10)
        self.x_Aix.setMin(min_time)
        self.x_Aix.setMax(max_time)

    def chart_init(self,s_key):
        self.chart = QChart()
        self.x_Aix = QDateTimeAxis()#定义x轴,实例化
        #self.x_Aix.setRange(52665,52765)
        #self.x_Aix.setLabelFormat("%0.2f")
        self.x_Aix.setFormat("hh:mm:ss")
        self.x_Aix.setTickCount(6)
        #self.x_Aix.setTickCount(6)
        #self.x_Aix.setMinorTickCount(0)

        self.y_Aix = QValueAxis()#定义y轴
        #self.y_Aix.setRange(-50,50)
        self.y_Aix.setLabelFormat("%0.2f")
        #self.y_Aix.setTickCount(6)
        self.y_Aix.setMinorTickCount(0)

        self.chart.addAxis(self.x_Aix,Qt.AlignBottom)
        self.chart.addAxis(self.y_Aix,Qt.AlignLeft)

        self.s_key = s_key
        self.series_list={}
        color_list = [QColor("blue"),QColor("green"),QColor("red"),QColor(152,245,255),QColor(84,255,159),QColor(255,193,193)]
        for k,c in zip(self.s_key,color_list):
            self.q_point[k] = queue.Queue()
            self.series_list[k] = QScatterSeries()
            self.series_list[k].setMarkerSize(9.0)
            self.series_list[k].setColor(QColor(c))
            self.series_list[k].setPen(QPen(QtCore.Qt.PenStyle.NoPen))
            self.chart.addSeries(self.series_list[k])
            self.series_list[k].setName(k)
            self.series_list[k].attachAxis(self.x_Aix)
            self.series_list[k].attachAxis(self.y_Aix)

        self.setChart(self.chart)