def create_areachart(self): chart = QtCharts.QChart() chart.setTitle("Area Chart") # The lower series initialized to zero values lower_series = None name = "Series " for i in range(len(self.data_table)): upper_series = QtCharts.QLineSeries(chart) for j in range(len(self.data_table[i])): data = self.data_table[i][j] if lower_series: points = lower_series.pointsVector() y_value = points[i].y() + data[0].y() upper_series.append(QPointF(j, y_value)) else: upper_series.append(QPointF(j, data[0].y())) area = QtCharts.QAreaSeries(upper_series, lower_series) area.setName("{}{}".format(name, i)) chart.addSeries(area) lower_series = upper_series chart.createDefaultAxes() chart.axisX().setRange(0, self.value_count - 1) chart.axisY().setRange(0, self.value_max) # Add space to label to add space between labels and axis chart.axisY().setLabelFormat("%.1f ") return chart
def __init__(self): super(LineGraphicsPlot, self).__init__() self.DataSeries = QtCharts.QSplineSeries() self.Area = QtCharts.QAreaSeries(self.DataSeries) self.Area.setBrush(QBrush(QColor(200,100,224,40))) #self.addSeries(self.DataSeries) self.addSeries(self.Area) self.AxisX = QtCharts.QValueAxis() self.AxisY = QtCharts.QValueAxis() self.addAxis(self.AxisX,QtCore.Qt.AlignBottom) self.addAxis(self.AxisY,QtCore.Qt.AlignLeft) #self.DataSeries.attachAxis(self.AxisX) #self.DataSeries.attachAxis(self.AxisY) self.Area.attachAxis(self.AxisX) self.Area.attachAxis(self.AxisY) self.AxisX.setTickCount(5) self.mx = 0 self.my = 0 self.AxisX.setRange(self.mx,self.mx + 5) self.AxisY.setRange(-1.2,1.2) self.legend().hide() self.axisX().hide() self.setTheme(QtCharts.QChart.ChartThemeDark) #self.setTheme(QtCharts.QChart.ChartThemeBrownSand) #self.setTheme(QtCharts.QChart.ChartThemeHighContrast) self.setPlotAreaBackgroundBrush(QBrush(QColor(200,100,14))) self.m_timer = QtCore.QTimer(self) self.m_timer.timeout.connect(self.handleTimeout) self.m_timer.start(25)
upperSeries = QtCharts.QLineSeries() lowerSeries = QtCharts.QLineSeries() #x = [x for x in range(1, 20, 2)] #y1 = [5, 7, 6, 7, 5, 7, 5, 4, 7, 5] #y2 = [3, 4, 2, 5, 3, 5, 2, 1, 4, 2] x = [x for x in range(1, 3, 1)] y1 = [5, 7] y2 = [3, 4] for i in range(len(x)): upperSeries.append(x[i], y1[i]) lowerSeries.append(x[i], y2[i]) series = QtCharts.QAreaSeries(upperSeries, lowerSeries) pen = QPen(Qt.red) pen.setWidth(3) series.setPen(pen) gradient = QLinearGradient(QPointF(0, 0), QPointF(0, 1)) gradient.setColorAt(0.0, QColor(255, 255, 255)) gradient.setColorAt(1.0, QColor(0, 255, 0)) gradient.setCoordinateMode(QGradient.ObjectBoundingMode) series.setBrush(gradient) chart = QtCharts.QChart() chart.addSeries(series) chart.setTitle('Simple Area Chart') chart.legend().hide()
def createAreaChart(data): """ axisX = QtCharts.QDateTimeAxis(); # axisX.setTickCount(10); axisX.setFormat("yyyy"); #axisX.setFormat("yyyy/MM/dd hh:mm:ss:zzz"); #axisX.setFormat("hh:mm:ss:zzz"); axisX.setTitleText("Time"); chart.addAxis(axisX, Qt.AlignBottom); axisY = QtCharts.QValueAxis(); # axisY.setLabelFormat("%.2f"); axisY.setTitleText("%"); chart.addAxis(axisY, Qt.AlignLeft); # chart.axes(Qt.Vertical)[0].setRange(0, 100) # chart.axes(Qt.Vertical)[0].setRange(0, 3) """ series0 = QtCharts.QSplineSeries() series0.append(QPointF(1, 5)) series0.append(QPointF(3, 7)) series0.append(QPointF(7, 6)) series0.append(QPointF(9, 7)) series0.append(QPointF(12, 6)) series0.append(QPointF(16, 7)) series0.append(QPointF(18, 5)) series1 = QtCharts.QSplineSeries() series1.append(QPointF(1, 3)) series1.append(QPointF(3, 4)) series1.append(QPointF(7, 3)) series1.append(QPointF(8, 2)) series1.append(QPointF(12, 3)) series1.append(QPointF(16, 4)) series1.append(QPointF(18, 3)) """ # seriesFilter = [0, 3, 4, 6] # seriesFilter = [0] seriesFilter = [0] valuesToDraw = [data[1][i] for i in seriesFilter] namesToDraw = [data[2][i] for i in seriesFilter] i = 0 values = valuesToDraw[i] name = namesToDraw[i] topLineSeries = QtCharts.QLineSeries() n = len(values) print(values) # конвертируем столбец time в float, чтобы можно было использовать его как значения оси x for j in range(n): # print(x) time = data[0][j] topLineSeries.append(float(time.toMSecsSinceEpoch()), values[j]) """ #areaSeries = QtCharts.QAreaSeries(topLineSeries); areaSeries = QtCharts.QAreaSeries(series0, series1) #areaSeries.setName(name); areaSeries.setName("name4535343534") pen = QPen(0x059605) pen.setWidth(3) areaSeries.setPen(pen) gradient = QLinearGradient(QPointF(0, 0), QPointF(0, 1)) gradient.setColorAt(0.0, 0x3cc63c) gradient.setColorAt(1.0, 0x26f626) gradient.setCoordinateMode(QGradient.ObjectBoundingMode) areaSeries.setBrush(gradient) chart = QtCharts.QChart() chart.addSeries(areaSeries) # chart.legend().hide() chart.setTitle("Area chart (population by continents)") chart.createDefaultAxes() chart.axes(Qt.Horizontal)[0].setRange(0, 20) chart.axes(Qt.Vertical)[0].setRange(0, 10) chartView = QtCharts.QChartView(chart) chartView.setRenderHint(QPainter.Antialiasing) # areaSeries.attachAxis(axisX); # areaSeries.attachAxis(axisY); """ for i in range(len(seriesFilter)): values = valuesToDraw[i] name = namesToDraw[i] series = QtCharts.QSplineSeries() series.setName(name) n = len(values) # print(values) # конвертируем столбец time в float, чтобы можно было использовать его как значения оси x for j in range(n): # print(x) time = data[0][j] series.append(float(time.toMSecsSinceEpoch()), values[j]) chart.addSeries(series) series.attachAxis(axisX); series.attachAxis(axisY); """ return chartView
def __init__(self, parent, capacity, color, gradient_start=None, gradient_end=None, speeds=(), is_upload=False, dp=1, max_speed=0): self._parent = parent self._capacity = capacity self._color = color self._gradient_start = gradient_start if gradient_start \ else self._color self._gradient_end = gradient_end if gradient_end \ else self._color.lighter() self._last_max_speed = max_speed self._chart = QtCharts.QChart() self._line_series = QtCharts.QLineSeries() self._lower_series = QtCharts.QLineSeries() if len(speeds) > self._capacity: speeds = speeds[len(speeds) - self._capacity:] for i, speed in enumerate(speeds): self._line_series.append(i, speed) self._lower_series.append(i, 0) self._last_index = len(speeds) self._series = QtCharts.QAreaSeries(self._line_series, self._lower_series) pen = QPen(self._color) pen.setWidth(1) self._series.setPen(pen) self._series.lowerSeries().setColor(self._gradient_end) gradient = QLinearGradient(QPointF(0, 0), QPointF(0, 1)) gradient.setColorAt(0.0, self._gradient_start) gradient.setColorAt(1.0, self._gradient_end) gradient.setCoordinateMode(QGradient.ObjectBoundingMode) self._series.setBrush(gradient) self._chart.addSeries(self._series) self._chart.layout().setContentsMargins(0, 0, 0, 0) # make chart look bigger margins = [-35, -25, -35, -37] self._chart.setContentsMargins(*margins) self._chart.setBackgroundRoundness(0) grid_pen = QPen(QColor("#EFEFF4")) grid_pen.setWidth(1) self._chart.createDefaultAxes() self._chart.axisX().setLabelsVisible(False) # self._chart.axisY().setLabelsVisible(False) self._chart.axisX().setTitleVisible(False) # self._chart.axisY().setTitleVisible(False) self._chart.axisX().setGridLineVisible(True) self._chart.axisX().setGridLinePen(grid_pen) # self._chart.axisY().setGridLineVisible(False) # self._chart.axisY().setGridLinePen(grid_pen) self._chart.axisX().setLineVisible(False) self._chart.axisY().setLineVisible(False) self._chart.axisX().setRange(self._last_index - self._capacity, self._last_index - 1) self._set_y_range() self._chart.axisY().hide() # self._chart.setBackgroundBrush(QBrush(QColor("#EFEFF4"))) self._view = QtCharts.QChartView(self._chart, self._parent) self._view.setRenderHint(QPainter.Antialiasing) self._view.setFixedSize(self._parent.size()) self._view.chart().legend().hide() self._chart.resize(self._view.width(), self._view.height()) text_start = "" self._scale_line = ScaleLine(self._chart, QColor("#777777"), QColor("black"), text_start=text_start, margins=margins, dp=dp, is_upload=is_upload) self._scale_line.set_line(self._last_max_speed, resize=True)