예제 #1
0
	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)
예제 #2
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()