def initUI(self): self.lineSeries = QtCharts.QLineSeries() # legend name # self.lineSeries.setName("trend") self.lineSeries.append(QtCore.QPoint(0, 0)) pen = QtGui.QPen(QtCore.Qt.red, 6, QtCore.Qt.SolidLine) self.lineSeries.setPen(pen) self.chart = QtCharts.QChart() self.chart.setAnimationOptions(QtCharts.QChart.AllAnimations) self.chart.setTitle("Airfoil contour analysis") self.chart.addSeries(self.lineSeries) self.chart.legend().setVisible(False) self.chart.legend().setAlignment(QtCore.Qt.AlignBottom) self.axisX = QtCharts.QValueAxis() self.axisY = QtCharts.QValueAxis() self.chart.setAxisX(self.axisX, self.lineSeries) self.chart.setAxisY(self.axisY, self.lineSeries) self.chartView = QtCharts.QChartView(self.chart) self.chartView.setRenderHint(QtGui.QPainter.Antialiasing) vlayout = QtWidgets.QVBoxLayout() vlayout.addWidget(self.chartView) self.setLayout(vlayout)
def __init__(self, parent: QtWidgets.QWidget = None): super().__init__(QtCharts.QChart(), theme=light_theme, parent=parent) self.setRenderHint(QtGui.QPainter.Antialiasing) self.chart().legend().hide() self.xaxis = QtCharts.QValueAxis() self.xaxis.setLabelFormat("%d") self.yaxis = QtCharts.QValueAxis() self.yaxis.setVisible(False) self.chart().addAxis(self.xaxis, QtCore.Qt.AlignBottom) self.chart().addAxis(self.yaxis, QtCore.Qt.AlignLeft) self.drift1 = QtCharts.QLineSeries() self.drift1.setPen(QtGui.QPen(sequential[1], 1.0)) self.chart().addSeries(self.drift1) self.drift1.attachAxis(self.xaxis) self.drift1.attachAxis(self.yaxis) self.drift2 = QtCharts.QLineSeries() self.drift2.setPen(QtGui.QPen(sequential[1], 1.0)) self.chart().addSeries(self.drift2) self.drift2.attachAxis(self.xaxis) self.drift2.attachAxis(self.yaxis) self.fit = QtCharts.QSplineSeries() self.fit.setPen(QtGui.QPen(sequential[2], 2.0)) self.chart().addSeries(self.fit) self.fit.attachAxis(self.xaxis) self.fit.attachAxis(self.yaxis)
def __init__(self, parent: Optional[QtWidgets.QWidget] = None, flags: Qt.WindowFlags = Qt.Widget): """Initialise a new instance of the class.""" super().__init__(parent, flags) self.chart_view = QtCharts.QChartView() self.chart_view.setRenderHint(QtGui.QPainter.Antialiasing) chart: QtCharts.QChart = self.chart_view.chart() chart.legend().setLabelColor(QtGui.QColor("#F0F0F0")) chart.setAnimationDuration(500) chart.setAnimationEasingCurve(QtCore.QEasingCurve.Linear) chart.setAnimationOptions(QtCharts.QChart.NoAnimation) chart.setBackgroundBrush(QtGui.QColor("transparent")) chart.setBackgroundRoundness(0.0) chart.setContentsMargins(-7, -7, -7, -7) chart.setMargins(QtCore.QMargins(10, 0, 10, 10)) self.chart: QtCharts.QChart = chart layout = QtWidgets.QVBoxLayout() layout.setMargin(0) layout.addWidget(self.chart_view) self.setLayout(layout) x_axis = QtCharts.QValueAxis() x_axis.setRange(-CHART_DURATION, 0.0) y_axis = QtCharts.QValueAxis() self.chart.addAxis(x_axis, QtCore.Qt.AlignBottom) self.chart.addAxis(y_axis, QtCore.Qt.AlignLeft) self._style_axes() self._largest_y_value: float = 0.0 self._smallest_y_value: float = sys.float_info.max self.__x_axis_maximum: float = 0.0
def plot_data(self): # Get table information series = QtCharts.QLineSeries() for i in range(self.table.rowCount()): text = float(self.table.item(i, 0).text()) number = float(self.table.item(i, 1).text()) series.append(text, number) chart = QtCharts.QChart() chart.addSeries(series) #chart.legend().setAlignment(Qt.AlignLeft) axis_x = QtCharts.QValueAxis() axis_x.setTickCount(10) axis_x.setLabelFormat("%.2f") axis_x.setTitleText("Step") chart.addAxis(axis_x, Qt.AlignBottom) series.attachAxis(axis_x) axis_y = QtCharts.QValueAxis() axis_y.setTickCount(10) axis_y.setLabelFormat("%.2f") axis_y.setTitleText("v_ntot") chart.addAxis(axis_y, Qt.AlignLeft) series.attachAxis(axis_y) self.chart_view.setChart(chart)
def __init__(self, device): super(MainWindow, self).__init__() self.series = QtCharts.QLineSeries() self.chart = QtCharts.QChart() self.chart.addSeries(self.series) self.axisX = QtCharts.QValueAxis() self.axisX.setRange(0, sampleCount) self.axisX.setLabelFormat("%g") self.axisX.setTitleText("Samples") self.axisY = QtCharts.QValueAxis() self.axisY.setRange(-1, 1) self.axisY.setTitleText("Audio level") self.chart.setAxisX(self.axisX, self.series) self.chart.setAxisY(self.axisY, self.series) self.chart.legend().hide() self.chart.setTitle("Data from the microphone ({})".format(device.deviceName())) formatAudio = QAudioFormat() formatAudio.setSampleRate(8000) formatAudio.setChannelCount(1) formatAudio.setSampleSize(8) formatAudio.setCodec("audio/pcm") formatAudio.setByteOrder(QAudioFormat.LittleEndian) formatAudio.setSampleType(QAudioFormat.UnSignedInt) self.audioInput = QAudioInput(device, formatAudio, self) self.ioDevice = self.audioInput.start() self.ioDevice.readyRead.connect(self._readyRead) self.chartView = QtCharts.QChartView(self.chart) self.setCentralWidget(self.chartView) self.buffer = [QPointF(x, 0) for x in range(sampleCount)] self.series.append(self.buffer)
def __init_color_calibration_widget(self, parent=None): self.__color_calibration_widget = QGroupBox("Color Correction Options", parent) self.__color_calibration_widget.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.MinimumExpanding) color_calibration_layout = QVBoxLayout(self.__color_calibration_widget) chart_widget = QWidget(self.__color_calibration_widget) chart_layout = QGridLayout(chart_widget) self.data_fit_chart = QtCharts.QChart() self.data_fit_chart_view = QtCharts.QChartView(self.data_fit_chart) self.axis_x = QtCharts.QValueAxis() self.axis_x.setTitleText("Pixel Intensity") self.axis_x.setRange(0, 1) self.data_fit_chart.addAxis(self.axis_x, Qt.AlignBottom) self.axis_y = QtCharts.QValueAxis() self.axis_y.setTitleText("Voxel Height (\u03BCm)") self.axis_y.setRange(0, 10) self.data_fit_chart.addAxis(self.axis_y, Qt.AlignLeft) chart_layout.addWidget(self.data_fit_chart_view, 0, 0, 1, 4) chart_widget.setLayout(chart_layout) buttons_widget = QWidget(self.__color_calibration_widget) buttons_layout = QHBoxLayout(buttons_widget) analyze_data_button = QPushButton("Analyze Data") analyze_data_button.clicked.connect(self.analyze_images) self.parameters_estimation_label = QLabel(f'Estimated parameters: \u03B1 = {self.dlp_color_calibrator.optimized_parameters[0]:.3f}, \u03B2 = {self.dlp_color_calibrator.optimized_parameters[1]:.3f}, \u03B3 = {self.dlp_color_calibrator.optimized_parameters[2]:.3f}', buttons_widget) buttons_layout.addWidget(analyze_data_button) buttons_layout.addWidget(self.parameters_estimation_label) buttons_widget.setLayout(buttons_layout) color_calibration_layout.addWidget(chart_widget) color_calibration_layout.addWidget(buttons_widget) self.__color_calibration_widget.setLayout(color_calibration_layout)
def __init__(self, title: str = None, parent: QtWidgets.QWidget = None): super().__init__(QtCharts.QChart(), theme=light_theme, parent=parent) self.setMinimumSize(QtCore.QSize(640, 320)) self.setRenderHint(QtGui.QPainter.Antialiasing) if title is not None: self.chart().setTitle(title) self.chart().legend().hide() self._xaxis = QtCharts.QValueAxis() # Alignment axis self._xaxis.setVisible(False) self.xaxis = QtCharts.QValueAxis() # Value axis self.xaxis.setGridLineVisible(False) self.yaxis = QtCharts.QValueAxis() self.yaxis.setGridLineVisible(False) self.yaxis.setLabelFormat("%d") self.addAxis(self._xaxis, QtCore.Qt.AlignBottom) self.addAxis(self.xaxis, QtCore.Qt.AlignBottom) self.addAxis(self.yaxis, QtCore.Qt.AlignLeft) self.series = QtCharts.QBarSeries() self.series.setBarWidth(1.0) self.chart().addSeries(self.series) self.series.attachAxis(self._xaxis) self.series.attachAxis(self.yaxis)
def add_series(self, name, columns): # Create QLineSeries self.series = QtCharts.QLineSeries() self.series.setName(name) # Filling QLineSeries for i in range(len(self.model)): # Getting the data x, y,_,_ = self.model[i][0] self.series.append(int(x), int(y)) self.chart.addSeries(self.series) self.chart.legend().setVisible(False) # Setting X-axis self.axis_x = QtCharts.QValueAxis() self.axis_x.setTickCount(len(self.model)) self.axis_x.setTitleText("hour") self.axis_x.setLabelFormat("%d:00") self.chart.addAxis(self.axis_x, Qt.AlignBottom) self.series.attachAxis(self.axis_x) # Setting Y-axis self.axis_y = QtCharts.QValueAxis() self.axis_y.setTickCount(1.0) self.axis_y.setLabelFormat("%.1f") self.axis_y.setTitleText("temperature") self.chart.addAxis(self.axis_y, Qt.AlignLeft) self.series.attachAxis(self.axis_y)
def add_series( self, name, columns, chart ): #выходит add.series так написан что по Ох автоматически будет дата? """ Формирует название оси """ self.series = QtCharts.QLineSeries() self.series.setName(name) """ формирует 1 массив series из 2 столбцов, добавляя в него данные из Х и У """ for i in range(self.model.rowCount()): """ получение даты """ t = self.model.index(i, 0).data( ) #типа нулевой столбец(дата) и в нем по строкам будем переходить с помощью цикла этого date_fmt = "yyyy-MM-dd HH:mm:ss.zzz" #но вообще тут уже прописано как бы что в нулевом столбце будет дата #x = QDateTime().fromString(t, date_fmt).toSecsSinceEpoch() x = float(QDateTime().fromString(t, date_fmt).toMSecsSinceEpoch()) #x = QDateTime().fromString("2019-01-01 12:00:00.100", date_fmt).toMSecsSinceEpoch() # не работает: # QLineSeries.append(x, y) ждёт float-ов, а не QDateTime() # x = QDateTime().fromString(t, date_fmt) y = float(self.model.index(i, columns[1]).data()) # print(x, y) # потому что сложно рисовать график с минусовой осью ??? if x > 0 and y > 0: self.series.append(x, y) chart.addSeries(self.series) """ задание оси X """ #self.axis_x = QtCharts.QDateTimeAxis() self.axis_x = QtCharts.QValueAxis() """ Класс QDateTimeAxis добавляет даты и время к оси диаграммы. """ self.axis_x.setTickCount(6) """setTickCounе( int count ) устанавливает количество отметок на оси для подсчета, на оси Х будет 10 штрихов """ #self.axis_x.setFormat("dd.MM.yy hh:mm:ss") """ setFormat - задаёт формат вывод текстового представления значения. """ self.axis_x.setTitleText("Дата") chart.addAxis(self.axis_x, Qt.AlignBottom) """ Добавляет ось оси к диаграмме, выровненной, как указано выравниванием. """ self.series.attachAxis(self.axis_x) """ Возвращает, true если ось была успешно присоединена, false в противном случае. """ """ задание оси Y """ self.axis_y = QtCharts.QValueAxis() """ Класс QValueAxis добавляет значения к осям диаграммы. """ self.axis_y.setTickCount(6) """ Свойство setTickCount содержит количество отметок на оси. Это указывает, сколько линий сетки нарисовано на графике. """ self.axis_y.setLabelFormat("%.2f") """ Свойство setLabelFormat содержит формат метки оси. """ self.axis_y.setTitleText( name ) #изменила название оси, что ифами написать, как обратиться к имени той колонки которую я в параметры передаю? chart.addAxis(self.axis_y, Qt.AlignLeft) self.series.attachAxis(self.axis_y) """ получение цвета из QC hart для использования в QTableView, будет выделять столбец таблицы тем же цветом что и линия в диарамме!! """ self.model.color = "{}".format(self.series.pen().color().name())
def __init__(self, parent: QtWidgets.QGraphicsItem = None): super().__init__(parent) self.setMinimumSize(640, 320) self.xaxis = QtCharts.QValueAxis() self.xaxis.setGridLineVisible(False) self.xaxis.rangeChanged.connect(self.updateYRange) self.xaxis.setLabelsVisible(False) self.yaxis = QtCharts.QValueAxis() self.yaxis.setGridLineVisible(False) self.yaxis.setLabelFormat("%.2g") self.yaxis.setTitleText("Response") self.addAxis(self.xaxis, QtCore.Qt.AlignBottom) self.addAxis(self.yaxis, QtCore.Qt.AlignLeft) self.yvalues: np.ndarray = None self.series = QtCharts.QLineSeries() self.series.setPen(QtGui.QPen(QtCore.Qt.black, 1.0)) self.series.setUseOpenGL(True) # Speed for many line? self.addSeries(self.series) self.series.attachAxis(self.xaxis) self.series.attachAxis(self.yaxis) self.scatter_series = QtCharts.QScatterSeries() self.scatter_series.setMarkerSize(5) self.scatter_series.setColor(QtCore.Qt.red) self.scatter_series.setUseOpenGL(True) self.addSeries(self.scatter_series) self.scatter_series.attachAxis(self.xaxis) self.scatter_series.attachAxis(self.yaxis) self.ub = QtCharts.QLineSeries() self.lc = QtCharts.QLineSeries() self.ld = QtCharts.QLineSeries() for series, color, label in zip( [self.ub, self.lc, self.ld], [QtGui.QColor(255, 0, 0), QtGui.QColor(0, 255, 0), QtGui.QColor(0, 0, 255)], ["μb", "Lc", "Ld"], ): series.setPen(QtGui.QPen(color, 1.0, QtCore.Qt.DashLine)) series.setName(label) series.setUseOpenGL(True) self.addSeries(series) series.attachAxis(self.xaxis) series.attachAxis(self.yaxis) self.vlines: List[QtCharts.QLineSeries] = [] # Clean legend self.legend().setMarkerShape(QtCharts.QLegend.MarkerShapeFromSeries) self.legend().markers(self.series)[0].setVisible(False) self.legend().markers(self.scatter_series)[0].setVisible(False)
def add_lineSeries_frames(self, input_widget): name, ext = input_widget.objectName().split('.') for obj in self.list_obj: if obj.name == name: self.axisX_vmaf = QtCharts.QValueAxis() self.axisY_vmaf = QtCharts.QValueAxis() try: self.chart_vmaf.addSeries( self.vmafls_frame_dict[obj.filename]) self.chart_vmaf.addAxis(self.axisX_vmaf, QtCore.Qt.AlignBottom) self.chart_vmaf.addAxis(self.axisY_vmaf, QtCore.Qt.AlignLeft) self.chart_vmaf.createDefaultAxes() except: pass try: self.chart_psnr.addSeries( self.psnrls_frame_dict[obj.filename]) self.chart_psnr.addAxis(self.axisX_vmaf, QtCore.Qt.AlignBottom) self.chart_psnr.addAxis(self.axisY_vmaf, QtCore.Qt.AlignLeft) self.chart_psnr.createDefaultAxes() except: pass try: self.chart_bitrate.addSeries( self.bitratels_frame_dict[obj.filename]) self.chart_bitrate.addAxis(self.axisX_vmaf, QtCore.Qt.AlignBottom) self.chart_bitrate.addAxis(self.axisY_vmaf, QtCore.Qt.AlignLeft) self.chart_bitrate.createDefaultAxes() except: pass if self.ref_path != None: if self.ref_obj.filename == input_widget.objectName(): self.chart_bitrate.addSeries(self.ref_bitrate_frame_ls) self.axisX = QtCharts.QValueAxis() self.axisY = QtCharts.QValueAxis() self.chart_bitrate.addAxis(self.axisX, QtCore.Qt.AlignBottom) self.chart_bitrate.addAxis(self.axisY, QtCore.Qt.AlignLeft) self.chart_bitrate.createDefaultAxes()
def __init__(self, title: str = None, parent: QtWidgets.QWidget = None): super().__init__(QtCharts.QChart(), theme=light_theme, parent=parent) self.setRubberBand(QtCharts.QChartView.RectangleRubberBand) self.setMinimumSize(QtCore.QSize(640, 480)) self.setRenderHint(QtGui.QPainter.Antialiasing) if title is not None: self.chart().setTitle(title) self.chart().legend().hide() self.xaxis = QtCharts.QValueAxis() self.yaxis = QtCharts.QValueAxis() self.addAxis(self.xaxis, QtCore.Qt.AlignBottom) self.addAxis(self.yaxis, QtCore.Qt.AlignLeft) self.label_series = QtCharts.QScatterSeries() self.label_series.append(0, 0) self.label_series.setBrush( QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.NoBrush)) self.label_series.setPointLabelsFormat("(@xPoint, @yPoint)") self.label_series.setPointLabelsColor(light_theme["text"]) self.label_series.setVisible(False) self.chart().addSeries(self.label_series) self.label_series.attachAxis(self.xaxis) self.label_series.attachAxis(self.yaxis) self.line = QtCharts.QLineSeries() self.line.setPen(QtGui.QPen(sequential[1], 1.5)) # self.line.setColor(QtCore.Qt.red) self.chart().addSeries(self.line) self.line.attachAxis(self.xaxis) self.line.attachAxis(self.yaxis) self.series = QtCharts.QScatterSeries() self.series.setPen(QtGui.QPen(sequential[1], 1.5)) self.series.setBrush(QtGui.QBrush(highlights[1])) self.series.setMarkerSize(12) self.chart().addSeries(self.series) self.series.attachAxis(self.xaxis) self.series.attachAxis(self.yaxis) self.series.hovered.connect(self.showPointPosition) self.label = QtWidgets.QGraphicsTextItem() self.label.setPlainText("hats") self.label.setFlag(QtWidgets.QGraphicsItem.ItemIgnoresTransformations) self.chart().scene().addItem(self.label) self.chart().plotAreaChanged.connect(self.moveLabel)
def __init__(self, parent: QtWidgets.QGraphicsItem = None): super().__init__(parent) self.setMinimumSize(640, 320) self._xaxis = QtCharts.QValueAxis() self._xaxis.setVisible(False) self.xaxis = NiceValueAxis() self.xaxis.setTitleText("Size (nm)") self.xaxis.setGridLineVisible(False) self.yaxis = QtCharts.QValueAxis() self.yaxis.setGridLineVisible(False) self.yaxis.setTitleText("Count") self.yaxis.setLabelFormat("%d") self.addAxis(self._xaxis, QtCore.Qt.AlignBottom) self.addAxis(self.xaxis, QtCore.Qt.AlignBottom) self.addAxis(self.yaxis, QtCore.Qt.AlignLeft) self.series = QtCharts.QBarSeries() self.series.setBarWidth(0.9) self.addSeries(self.series) self.series.attachAxis(self._xaxis) self.series.attachAxis(self.yaxis) self.set = QtCharts.QBarSet("sizes") self.set.setColor(QtCore.Qt.black) self.set.hovered.connect(self.barHovered) self.series.append(self.set) self.fit = QtCharts.QSplineSeries() self.fit.setPen(QtGui.QPen(QtGui.QColor(255, 172, 0), 2.0)) self.addSeries(self.fit) self.fit.attachAxis(self.xaxis) self.fit.attachAxis(self.yaxis) self.label_fit = QtWidgets.QGraphicsTextItem(self) self.label_fit.setFont(QtGui.QFont("sans", 12, italic=False)) self.label_fit.setZValue(99) self.label_fit.setDefaultTextColor(QtGui.QColor(255, 172, 0)) self.xaxis.rangeChanged.connect(self.updateFitLabelPos) self.label_hovered = QtWidgets.QGraphicsTextItem(self) self.plotAreaChanged.connect(self.updateHoveredLabelPos) self.vlines: List[QtCharts.QLineSeries] = [] # Clean legend self.legend().setMarkerShape(QtCharts.QLegend.MarkerShapeFromSeries) self.legend().markers(self.series)[0].setVisible(False)
def __init__(self, parent=None): super().__init__(parent) self.legend().setAlignment(QtCore.Qt.AlignLeft) self.legend().setContentsMargins(0.0, 0.0, 100.0, 0.0) self.legend().setMarkerShape(QtCharts.QLegend.MarkerShapeCircle) self.axisX = QtCharts.QValueAxis() self.axisY = QtCharts.QValueAxis() self.axisX.setVisible(False) self.x = 0 self.y = 0 self.timer = QtCore.QTimer() self.timer.setInterval(1000) self.timer.timeout.connect(self.onTimeout) self.percent = cpu_percent(percpu=True) for i in range(cpu_count()): core_series = QtCharts.QSplineSeries() core_series.setName(f"CPU {i + 1}: {self.percent[i]: .1f} %") colour = [ random.randrange(0, 255), random.randrange(0, 255), random.randrange(0, 255) ] pen = QtGui.QPen(QtGui.QColor(colour[0], colour[1], colour[2])) pen.setWidth(1) core_series.setPen(pen) core_series.append(self.x, self.y) self.addSeries(core_series) self.addAxis(self.axisX, QtCore.Qt.AlignBottom) self.addAxis(self.axisY, QtCore.Qt.AlignLeft) for i in self.series(): i.attachAxis(self.axisX) i.attachAxis(self.axisY) self.axisX.setRange(0, 100) self.axisY.setTickCount(5) self.axisY.setRange(0, 100) self.timer.start()
def add_series(self, name, columns): self.series = QtCharts.QLineSeries() self.series.setName(name) for i in range(self.model.rowCount()): t = self.model.index(i, 0).data() date_fmt = "yyyy-MM-dd HH:mm:ss.zzz" x = QDateTime().fromString(t, date_fmt).toSecsSinceEpoch() y = float(self.model.index(i, 1).data()) if x > 0 and y > 0: self.series.append(x, y) self.chart.addSeries(self.series) self.axis_x = QtCharts.QDateTimeAxis() self.axis_x.setTickCount(10) self.axis_x.setFormat("dd.MM (h:mm)") self.axis_x.setTitleText("Date") self.chart.addAxis(self.axis_x, Qt.AlignBottom) self.series.attachAxis(self.axis_x) self.axis_y = QtCharts.QValueAxis() self.axis_y.setTickCount(10) self.axis_y.setLabelFormat("%.2f") self.axis_y.setTitleText("Magnitude") self.chart.addAxis(self.axis_y, Qt.AlignLeft) self.series.attachAxis(self.axis_y) self.model.color = "{}".format(self.series.pen().color().name()) print(self.model.color)
def __init__(self, parent=None): QWidget.__init__(self, parent) self.series = QtCharts.QLineSeries() self.series.setName("Karma points") self.task_list = None self.max_bound: datetime = datetime.datetime.now() self.interval = 7 self.karma_point = 0 self.chart = QtCharts.QChart() self.chart.legend().setVisible(True) self.chart.legend().setAlignment(Qt.AlignBottom) self.chart.addSeries(self.series) self.chart.setTitle("Karma Points") self.chart.setAnimationOptions(QtCharts.QChart.SeriesAnimations) self.axisX = QtCharts.QDateTimeAxis() self.axisX.setFormat("dd MMM") self.axisX.setTickCount(self.interval) self.axisY = QtCharts.QValueAxis() self.chart.setAxisX(self.axisX, self.series) self.chart.setAxisY(self.axisY, self.series) self.chartView = QtCharts.QChartView(self.chart) self.chartView.setRenderHint(QPainter.Antialiasing) self.main_layout = QVBoxLayout(self) self.main_layout.addWidget(self.chartView) self.setLayout(self.main_layout) self.setFixedSize(651, 421)
def _set_returns_chart(self, asset_universe: List[str], implied_returns: pd.Series) -> None: implied_returns = implied_returns.reindex(asset_universe) bar_series = QtCharts.QBarSeries() bar_set = QtCharts.QBarSet("Returns") bar_set.append(implied_returns.mul(100).values.tolist()) bar_series.append(bar_set) # configure basic chart chart = QtCharts.QChart() chart.setTitle("Market Implied Expected Returns") title_font = QtGui.QFont() title_font.setBold(True) chart.setFont(title_font) chart.addSeries(bar_series) # configure the x axis axis_x = QtCharts.QBarCategoryAxis() axis_x.append([s.replace(" ", "<br>") for s in asset_universe]) chart.createDefaultAxes() chart.setAxisX(axis_x) # configure the y axis y_min = implied_returns.min() * 100 y_max = implied_returns.max() * 100 axis_y = QtCharts.QValueAxis() self._set_y_axis_limits(y_max, y_min, axis_y, 2) axis_y.setLabelFormat("%.0f") axis_y.setTitleText("Expected Return (%pa)") chart.setAxisY(axis_y) bar_series.attachAxis(axis_y) self._returns_chart_view.setChart(chart)
def copyAxis(chart: QtCharts.QChart, axis: QtCharts.QAbstractAxis) -> QtCharts.QAbstractAxis: a_copy: QtCharts.QAbstractAxis if axis.type() == QtCharts.QAbstractAxis.AxisTypeBarCategory: a_copy = QtCharts.QBarCategoryAxis(chart) labels = axis.categories() a_copy.append(labels) elif axis.type() == QtCharts.QAbstractAxis.AxisTypeCategory: a_copy = QtCharts.QCategoryAxis(chart) labels = axis.categoriesLabels() a_copy.setStartValue(axis.startValue(labels[0])) a_copy.setLabelsPosition(axis.labelsPosition()) for lab in labels: a_copy.append(lab, axis.endValue(lab)) elif axis.type() == QtCharts.QAbstractAxis.AxisTypeValue: a_copy = QtCharts.QValueAxis(chart) a_copy.setMin(axis.min()) a_copy.setMax(axis.max()) a_copy.setTickCount(axis.tickCount()) a_copy.setMinorTickCount(axis.minorTickCount()) a_copy.setTickInterval(axis.tickInterval()) elif axis.type() == QtCharts.QAbstractAxis.AxisTypeDateTime: a_copy = QtCharts.QDateTimeAxis(chart) a_copy.setMin(axis.min()) a_copy.setMax(axis.max()) a_copy.setFormat(axis.format()) a_copy.setTickCount(axis.tickCount()) else: raise NotImplementedError('Cannot copy axis of type {}'.format( str(axis.type()))) a_copy.setTitleText(axis.titleText()) a_copy.setTitleFont(axis.titleFont()) return a_copy
def setYRange(self, maxY, axisY: QtCharts.QValueAxis(), minY=None): if maxY <= 60: divider = 10 elif maxY <= 200: divider = 50 elif maxY <= 600: divider = 100 elif maxY <= 2000: divider = 500 elif maxY <= 6000: divider = 1000 elif maxY <= 20000: divider = 5000 axisY.applyNiceNumbers() rangeLim = math.ceil(maxY / divider) * divider if minY is None: axisY.setRange(0, rangeLim) else: rangeMin = math.floor(minY / divider) * divider axisY.setRange(rangeMin, rangeLim) if minY is None: numTicks = math.ceil(maxY / divider) + 1 else: numTicks = math.ceil(maxY / divider) + 1 - math.floor( minY / divider) axisY.setTickCount(numTicks)
def __createChartWithValues(self, dataframe: pd.DataFrame, attributes: Set[int], timeIndex: int, timeIndexType: Type) -> QtCharts.QChart: chart = QtCharts.QChart() # Sort by time timeIndexName: str = dataframe.columns[timeIndex] filteredDf = dataframe.iloc[:, [timeIndex, *attributes]].sort_values( by=timeIndexName, axis=0, ascending=True) # filteredDf has timeIndex at position 0, attributes following # Drop nan labels filteredDf.dropna(axis=0, inplace=True, subset=[timeIndexName]) # Create X axis timeSeries: pd.Series = filteredDf.iloc[:, 0] xAxis = self.__createTimeAxis(timeSeries, timeIndexType) chart.addAxis(xAxis, Qt.AlignBottom) # Create the Y axis yAxis = QtCharts.QValueAxis(chart) yAxis.setTitleText('Values') chart.addAxis(yAxis, Qt.AlignLeft) series: List[QtCharts.QLineSeries] series, yMin, yMax = self.__createSeriesForAttributes( filteredDf, timeIndex=0, timeIndexType=timeIndexType) # Set range to show every point in chart yAxis.setRange(yMin, yMax) for s in series: chart.addSeries(s) s.attachAxis(xAxis) s.attachAxis(yAxis) return chart
def __init__(self, parent=None): QWidget.__init__(self, parent) bar_set = QtCharts.QBarSet("ME") bar_set.setColor(QColor(231, 119, 32)) self.task_list = None self.setFont("Roboto Light") self.max_bound: datetime = datetime.datetime.now() self.setFixedSize(651, 421) self.interval = 7 self.series = QtCharts.QBarSeries() self.chart = QtCharts.QChart() self.chart.addSeries(self.series) self.chart.setFont("Roboto Light") self.chart.setTitle("Task Done") self.chart.setAnimationOptions(QtCharts.QChart.SeriesAnimations) self.axisX = QtCharts.QBarCategoryAxis() self.axisY = QtCharts.QValueAxis() self.chart.setAxisY(self.axisY, self.series) self.chart.setAxisX(self.axisX, self.series) self.chart.legend().setVisible(True) self.chart.legend().setAlignment(Qt.AlignBottom) self.chartView = QtCharts.QChartView(self.chart) self.chartView.setRenderHint(QPainter.Antialiasing) self.main_layout = QVBoxLayout(self) self.main_layout.addWidget(self.chartView) self.setLayout(self.main_layout)
def __init__(self, frame): self.series = QtCharts.QLineSeries() self.series.setColor(Qt.red) self.axis_x = QtCharts.QDateTimeAxis() # Number of items to display self.axis_x.setTickCount(int(common.SETTINGS["DataCacheSize"])) self.axis_x.setFormat("hh:mm:ss:z") # Date format self.axis_x.setTitleText("Time") self.axis_y = QtCharts.QValueAxis() self.axis_y.setTitleText("Value") self.chart = QtCharts.QChart() self.chart.setTitle("") self.chart.addSeries(self.series) self.chart.addAxis(self.axis_x, QtCore.Qt.AlignBottom) self.chart.addAxis(self.axis_y, QtCore.Qt.AlignLeft) self.series.attachAxis(self.axis_x) self.series.attachAxis(self.axis_y) self.chart_view = QtCharts.QChartView(self.chart) self.layout = QVBoxLayout() self.layout.addWidget(self.chart_view) self.frame = frame self.frame.setLayout(self.layout)
def __createChartWithIndexes(self, dataframe: pd.DataFrame, attributes: Set[int], indexes: List[Any], timeIndex: int, timeIndexType: Type, indexMean: bool = False) -> QtCharts.QChart: """ Creates a chart with a series for every 'index' in 'dataframe' showing only column specified in 'attributes' :param attributes: the position of the columns to consider to create series :param indexes: the indexes of the dataframe to use :param timeIndex: the index of the column in 'dataframe' which should be considered the time axis :param timeIndexType: the type of column specified in 'timeIndex'. Can be Ordinal or Datetime :param indexMean: ignored for now """ columns = dataframe.columns timeIndexName: str = columns[timeIndex] # Get the subset of attribute columns and selected indexes filteredDf = dataframe.loc[indexes, columns[[timeIndex, *attributes]]] \ .dropna(axis=0, subset=[timeIndexName]) filteredDf = filteredDf.sort_values(by=timeIndexName, axis=0, ascending=True) # Group rows by their index attribute. Every index has a distinct list of values dfByIndex = filteredDf.groupby(filteredDf.index) timeAxisColumn: pd.Series = list(dfByIndex)[0][1][timeIndexName] chart = QtCharts.QChart() # There will be 1 time axis for all the series, so it is created based on the first series # This function is passed the original time label (either Ordinal or Datetime) xAxis = self.__createTimeAxis(timeAxisColumn, timeIndexType) chart.addAxis(xAxis, Qt.AlignBottom) # Create the Y axis yAxis = QtCharts.QValueAxis() yAxis.setTitleText('Values') # Add axis Y to chart chart.addAxis(yAxis, Qt.AlignLeft) # Add every index series groupedValues: pd.DataFrame # timeValue, timeAttribute, *seriesValue for group, groupedValues in dfByIndex: # Create a series for this 'index' groupName: str = str(group) allSeries: List[QtCharts.QLineSeries] allSeries, yMin, yMax = self.__createSeriesForAttributes( groupedValues, 0, timeIndexType=timeIndexType) yAxis.setRange(yMin, yMax) for series in allSeries: chart.addSeries(series) series.attachAxis(xAxis) series.attachAxis(yAxis) if len(allSeries) == 1: # Only 1 attribute was selected, so assume we have multiple indexes (groups) allSeries[0].setName(groupName) return chart
def plotSavingsBars(self): chart = QtCharts.QChart() # barSets = [] maxVal = 0 minVal = 0 barSeries = QtCharts.QBarSeries() expSet = QtCharts.QBarSet('Ausgaben') expSet.append(self.sumData['exp']) maxVal = max(maxVal, max(self.sumData['exp'])) minVal = min(minVal, min(self.sumData['exp'])) barSeries.append(expSet) incSet = QtCharts.QBarSet('Einnahmen') incSet.append(self.sumData['inc']) maxVal = max(maxVal, max(self.sumData['inc'])) minVal = min(minVal, min(self.sumData['inc'])) barSeries.append(incSet) savSet = QtCharts.QBarSet('Rücklagen') savSet.append(self.sumData['sav']) maxVal = max(maxVal, max(self.sumData['sav'])) minVal = min(minVal, min(self.sumData['sav'])) barSeries.append(savSet) # self.barSets = barSets chart.addSeries(barSeries) titleFont = QFont("Sans Serif") titleFont.setPointSize(16) titleFont.setBold(True) chart.setTitleFont(titleFont) chart.setTitle("Rücklagen") axisX = QtCharts.QBarCategoryAxis() axisX.append(self.plotDataTags) chart.setAxisX(axisX, barSeries) # axisX.setRange(self.plotDataTags[0], self.plotDataTags[-1]) axisY = QtCharts.QValueAxis() axisY.setLabelFormat("%i") axisY.setTitleText("€") if minVal < 0: self.setYRange(maxVal, axisY, minVal) else: self.setYRange(maxVal, axisY) # chart.setAxisY(axisY, lineSeries) chart.setAxisY(axisY, barSeries) # axisY.setRange(0, 20) chart.legend().setVisible(True) chart.legend().setAlignment(Qt.AlignRight) self.setChart(chart) self.setRenderHint(QPainter.Antialiasing) # draw the plot from scratch (if that makes a difference) print('Savings bar plot drawn')
def plotMeterLvl(self, legendSelection): chart = QtCharts.QChart() lineSeries = QtCharts.QLineSeries() for entry in self.plotData['Zählerstände'][legendSelection]: lineSeries.append(entry['date'].toMSecsSinceEpoch(), entry['level']) chart.addSeries(lineSeries) titleFont = QFont("Sans Serif") titleFont.setPointSize(16) titleFont.setBold(True) chart.setTitleFont(titleFont) chart.setTitle("Zählerstände: " + legendSelection) axisX = QtCharts.QDateTimeAxis() tickCount = min( [12, len(self.plotData['Zählerstände'][legendSelection])]) axisX.setTickCount(tickCount) axisX.setFormat("MM/yy") # axisX.setFormat("MMM yyyy") axisX.setTitleText("Ablesedatum") chart.setAxisX(axisX, lineSeries) # chart.addAxis(axisX, Qt.AlignBottom) # lineSeries.attachAxis(axisX) # axisX.setRange(self.plotDataTags[0], self.plotDataTags[-1]) axisY = QtCharts.QValueAxis() axisY.setLabelFormat("%i") if legendSelection == 'Strom': axisY.setTitleText("Stromzählerstand [kWh]") elif legendSelection == 'Gas': axisY.setTitleText("Gaszählerstand [m<sup>3</sup>]") elif legendSelection == 'Wasser': axisY.setTitleText("Wasserzählerstand [m<sup>3</sup>]") # if minVal < 0: # self.setYRange(maxVal, axisY, minVal) # else: # self.setYRange(maxVal, axisY) chart.setAxisY(axisY, lineSeries) # chart.addAxis(axisY, Qt.AlignLeft) # lineSeries.attachAxis(axisY) # axisY.setRange(0, 20) chart.legend().setVisible(False) # chart.legend().setAlignment(Qt.AlignRight) self.setChart(chart) self.setRenderHint(QPainter.Antialiasing) # draw the plot from scratch (if that makes a difference) print('Meter bar plot drawn')
def __init__(self, title: str = None, parent: QtWidgets.QWidget = None): super().__init__(QtCharts.QChart(), theme=light_theme, parent=parent) self.setRubberBand(QtCharts.QChartView.RectangleRubberBand) self.setMinimumSize(QtCore.QSize(640, 480)) self.setRenderHint(QtGui.QPainter.Antialiasing) if title is not None: self.chart().setTitle(title) self.chart().legend().hide() self.xaxis = QtCharts.QValueAxis() self.xaxis.setRange(0.0, 1.0) self.yaxis = QtCharts.QValueAxis() self.yaxis.setRange(0.0, 1.0) self.addAxis(self.xaxis, QtCore.Qt.AlignBottom) self.addAxis(self.yaxis, QtCore.Qt.AlignLeft) self.scatter = QtCharts.QScatterSeries() self.scatter.setColor(sequential[1]) self.scatter.setMarkerSize(5) self.scatter.setUseOpenGL(True) self.chart().addSeries(self.scatter) self.scatter.attachAxis(self.xaxis) self.scatter.attachAxis(self.yaxis) self.line = QtCharts.QLineSeries() self.line.setPen(QtGui.QPen(QtCore.Qt.black, 1.5)) self.chart().addSeries(self.line) self.line.attachAxis(self.xaxis) self.line.attachAxis(self.yaxis) self.t1 = QtCharts.QLineSeries() self.t1.setPen(QtGui.QPen(QtCore.Qt.black, 1.0, QtCore.Qt.DashLine)) self.chart().addSeries(self.t1) self.t1.attachAxis(self.xaxis) self.t1.attachAxis(self.yaxis) self.t2 = QtCharts.QLineSeries() self.t2.setPen(QtGui.QPen(QtCore.Qt.black, 1.0, QtCore.Qt.DashLine)) self.chart().addSeries(self.t2) self.t2.attachAxis(self.xaxis) self.t2.attachAxis(self.yaxis)
def __init__(self): QMainWindow.__init__(self) self.set0 = QtCharts.QBarSet("Jane") self.set1 = QtCharts.QBarSet("John") self.set2 = QtCharts.QBarSet("Axel") self.set3 = QtCharts.QBarSet("Mary") self.set4 = QtCharts.QBarSet("Sam") self.set0.append([1, 2, 3, 4, 5, 6]) self.set1.append([5, 0, 0, 4, 0, 7]) self.set2.append([3, 5, 8, 13, 8, 5]) self.set3.append([5, 6, 7, 3, 4, 5]) self.set4.append([9, 7, 5, 3, 1, 2]) self.barSeries = QtCharts.QBarSeries() self.barSeries.append(self.set0) self.barSeries.append(self.set1) self.barSeries.append(self.set2) self.barSeries.append(self.set3) self.barSeries.append(self.set4) self.lineSeries = QtCharts.QLineSeries() self.lineSeries.setName("trend") self.lineSeries.append(QPoint(0, 4)) self.lineSeries.append(QPoint(1, 15)) self.lineSeries.append(QPoint(2, 20)) self.lineSeries.append(QPoint(3, 4)) self.lineSeries.append(QPoint(4, 12)) self.lineSeries.append(QPoint(5, 17)) self.chart = QtCharts.QChart() self.chart.addSeries(self.barSeries) self.chart.addSeries(self.lineSeries) self.chart.setTitle("Line and barchart example") self.categories = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"] self.axisX = QtCharts.QBarCategoryAxis() self.axisX.append(self.categories) self.chart.setAxisX(self.axisX, self.lineSeries) self.chart.setAxisX(self.axisX, self.barSeries) self.axisX.setRange("Jan", "Jun") self.axisY = QtCharts.QValueAxis() self.chart.setAxisY(self.axisY, self.lineSeries) self.chart.setAxisY(self.axisY, self.barSeries) self.axisY.setRange(0, 20) self.chart.legend().setVisible(True) self.chart.legend().setAlignment(Qt.AlignBottom) self.chartView = QtCharts.QChartView(self.chart) self.chartView.setRenderHint(QPainter.Antialiasing) self.setCentralWidget(self.chartView)
def __init__(self, data: ColorTransferFunction = None): super().__init__(data) self.chart = ColorTransferFunctionChart(data) # self.chart.legend().hide() self.chart_rect_f = QRectF() self.axis_x = QtCharts.QValueAxis() # self.axis_x.setLabelFormat('%d') self.axis_x.setLabelFormat('%.1f') self.axis_x.setTitleText('Intensity') self.chart.addAxis(self.axis_x, Qt.AlignBottom) self.axis_y = QtCharts.QValueAxis() # self.axis_y.setTickCount(10) self.axis_y.setLabelFormat('%.2f') # self.axis_y.setTitleText('Magnitude') self.chart.addAxis(self.axis_y, Qt.AlignLeft) self.axis_x.setRange(0, self.data.points[-1].x) self.axis_y.setRange(0, 1) # Add an empty series, else |chart.mapToPosition| will no work self.series = self.add_series() self.chart_view = QtCharts.QChartView(self.chart) # self.chart_view.setRubberBand(QtCharts.QChartView.RectangleRubberBand) self.chart_view.setRenderHint(QPainter.Antialiasing) self.scene = self.chart_view.scene() self._interval_views = SortedList() self._point_views = [] if self.data is not None: self._add_interval_views() self._add_point_views() self.data.point_added.connect(self._on_point_added) grid_layout = QGridLayout() grid_layout.setContentsMargins(0, 0, 0, 0) grid_layout.addWidget(self.chart_view) self.setLayout(grid_layout)
def add_barSeries(self): self.barChart_vmaf.addSeries(self.vmaf_barSeries) self.barChart_psnr.addSeries(self.psnr_barSeries) self.barChart_bitrate.addSeries(self.bitrate_barSeries) self.axisX = QtCharts.QValueAxis() self.axisY = QtCharts.QValueAxis() self.barChart_vmaf.addAxis(self.axisX, QtCore.Qt.AlignBottom) self.barChart_vmaf.addAxis(self.axisY, QtCore.Qt.AlignLeft) self.barChart_vmaf.createDefaultAxes() self.barChart_psnr.addAxis(self.axisX, QtCore.Qt.AlignBottom) self.barChart_psnr.addAxis(self.axisY, QtCore.Qt.AlignLeft) self.barChart_psnr.createDefaultAxes() self.barChart_bitrate.addAxis(self.axisX, QtCore.Qt.AlignBottom) self.barChart_bitrate.addAxis(self.axisY, QtCore.Qt.AlignLeft) self.barChart_bitrate.createDefaultAxes()
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)