class FlowChart(QChart): def __init__(self): super().__init__() self.series_list = [] self.axisX = QValueAxis() self.axisY = QValueAxis() self.axisPen = QPen(PyQt5.QtCore.Qt.red) self.axisPen.setWidth(4) self.axisX.setLinePen(self.axisPen) self.axisY.setLinePen(self.axisPen) self.axixBrush = QBrush(PyQt5.QtCore.Qt.green) self.axisX.setLabelsBrush(self.axixBrush) self.axisX.setGridLineVisible(True) self.axisY.setLabelsBrush(self.axixBrush) self.axisY.setGridLineVisible(True) self.axisY.setRange(0, 28) self.setAxisX(self.axisX) self.setAxisY(self.axisY) def add_xyseries(self, maxinterval, maxpoints=5000, type=QLineSeries): series = FlowSeries( maxinterval=maxinterval, maxpoints=maxpoints, type=type) self.addSeries(series.series) series.attachAxes(self.axisX, self.axisY) self.series_list.append(series) return series def set_yrange(self, ymin, ymax): self.axisY.setRange(ymin, ymax) def update(self): xmin = None xmax = None for s in self.series_list: r = s.range() if xmin is None or xmin > r[0]: xmin = r[0] if xmax is None or xmax < r[1]: xmax = r[1] self.axisX.setRange(xmin, xmax) for s in self.series_list: s.replace()
class StaticChart(QChart): def __init__(self): super().__init__() self.series_list = [] self.axisX = QValueAxis() self.axisY = QValueAxis() self.axisPen = QPen(PyQt5.QtCore.Qt.red) self.axisPen.setWidth(4) self.axisX.setLinePen(self.axisPen) self.axixBrush = QBrush(PyQt5.QtCore.Qt.green) self.axisX.setLabelsBrush(self.axixBrush) self.axisX.setGridLineVisible(True) self.setAxisX(self.axisX) self.setAxisY(self.axisY) def add_xyseries(self, type=StaticSeries): series = type() self.addSeries(series) series.attachAxis(self.axisX) series.attachAxis(self.axisY) self.series_list.append(series) return series def set_xrange(self, xmin, xmax): self.axisX.setRange(xmin, xmax) def set_yrange(self, ymin, ymax): self.axisY.setRange(ymin, ymax) def autoscale(self): xmax = ymax = float("-inf") xmin = ymin = float("+inf") for s in self.series_list: points = s.pointsVector() for p in points: if p.x() < xmin: xmin = p.x() if p.x() > xmax: xmax = p.x() if p.y() < ymin: ymin = p.y() if p.y() > ymax: ymax = p.y() self.set_xrange(xmin, xmax) self.set_yrange(ymin, ymax)
def __init__(self, parent=None): super().__init__(parent=parent) self.setpoint_temperature = None self.chart = QChart() self.chart.legend().hide() self.setChart( self.chart ) self.setRenderHint(QPainter.Antialiasing) self.chart.setPlotAreaBackgroundBrush( QBrush(Qt.black) ) self.chart.setPlotAreaBackgroundVisible( True ) self.setpointTemperatureSeries = QLineSeries( self.chart ) pen = self.setpointTemperatureSeries.pen() pen.setWidthF(2.) pen.setColor( Qt.green ) self.setpointTemperatureSeries.setPen( pen ) #self.setpointTemperatureSeries.setUseOpenGL( True ) self.chart.addSeries( self.setpointTemperatureSeries ) self.temperatureSeries = QLineSeries( self.chart ) pen = self.temperatureSeries.pen() pen.setWidthF(2.) pen.setColor( Qt.red ) self.temperatureSeries.setPen( pen ) #self.temperatureSeries.setUseOpenGL( True ) self.chart.addSeries( self.temperatureSeries ) self.number_of_samples_to_keep = 2 * 5 * 60 self.xMin = QDateTime.currentDateTime().toMSecsSinceEpoch() self.xMax = QDateTime.currentDateTime().toMSecsSinceEpoch() self.yMin = 400 self.yMax = 0 #self.chart.createDefaultAxes() #x_axis = QValueAxis() x_axis = QDateTimeAxis() x_axis.setTitleText( "Time" ) x_axis.setFormat("HH:mm:ss") self.chart.addAxis( x_axis, Qt.AlignBottom ) self.temperatureSeries.attachAxis( x_axis ) self.setpointTemperatureSeries.attachAxis( x_axis ) startDate = QDateTime.currentDateTime().addSecs( -5 * 60 ) endDate = QDateTime.currentDateTime().addSecs( 5 * 60 ) #startDate = QDateTime(QDate(2017, 1, 9), QTime(17, 25, 0)) #endDate = QDateTime(QDate(2017, 1, 9), QTime(17, 50, 0)) #self.chart.axisX().setRange( startDate, endDate ) #self.chart.axisX().setRange( 0, 100 ) y_axis = QValueAxis() y_axis.setTitleText( "Temperature (K)" ) self.chart.addAxis( y_axis, Qt.AlignLeft ) self.temperatureSeries.attachAxis( y_axis ) self.setpointTemperatureSeries.attachAxis( y_axis ) self.chart.axisY().setRange( 0, 400 ) #self.chart.axisY().setRange( 260., 290. ) self.temperatureSeries.pointAdded.connect( self.Rescale_Axes ) #self.setpointTemperatureSeries.pointAdded.connect( self.Rescale_Axes ) self.setRubberBand( QChartView.HorizontalRubberBand ) # Customize chart title font = QFont() font.setPixelSize(24); self.chart.setTitleFont(font); self.chart.setTitleBrush(QBrush(Qt.white)); ## Customize chart background #backgroundGradient = QLinearGradient() #backgroundGradient.setStart(QPointF(0, 0)); #backgroundGradient.setFinalStop(QPointF(0, 1)); #backgroundGradient.setColorAt(0.0, QColor(0x000147)); #backgroundGradient.setColorAt(1.0, QColor(0x000117)); #backgroundGradient.setCoordinateMode(QGradient.ObjectBoundingMode); #self.chart.setBackgroundBrush(backgroundGradient); transparent_background = QBrush(QColor(0,0,0,0)) self.chart.setBackgroundBrush( transparent_background ) # Customize axis label font labelsFont = QFont() labelsFont.setPixelSize(16); x_axis.setLabelsFont(labelsFont) y_axis.setLabelsFont(labelsFont) x_axis.setTitleFont(labelsFont) y_axis.setTitleFont(labelsFont) # Customize axis colors axisPen = QPen(QColor(0xd18952)) axisPen.setWidth(2) x_axis.setLinePen(axisPen) y_axis.setLinePen(axisPen) # Customize axis label colors axisBrush = QBrush(Qt.white) x_axis.setLabelsBrush(axisBrush) y_axis.setLabelsBrush(axisBrush) x_axis.setTitleBrush(axisBrush) y_axis.setTitleBrush(axisBrush)