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)
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
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)
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
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)
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)
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)
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())
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()
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)