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=None, f=None, *args, **kwargs): QtWidgets.QWidget.__init__(self) self.maxSize = 31 # 只存储最新的31个数据 self.maxX = 300 self.maxY = 100 self.data = [] #折线 self.splineSeries = QtCharts.QSplineSeries() #离散点 self.scatterSeries = QtCharts.QScatterSeries() self.scatterSeries.setMarkerSize(8) self.chart = QtCharts.QChart() self.chart.addSeries(self.splineSeries) self.chart.addSeries(self.scatterSeries) self.chart.legend().hide() self.chart.setTitle("实时动态曲线") self.chart.createDefaultAxes() self.chart.axisX().setRange(0, self.maxX) self.chart.axisY().setRange(0, self.maxY) self.chartView = QtCharts.QChartView(self.chart) #self.chartView.setRenderHint(QtGui.QPainter.Antialiasing) layout = QtWidgets.QHBoxLayout() layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.chartView) self.setLayout(layout) self.thread=None
def __init__(self, parent=None): super(View, self).__init__(parent) self.setScene(QGraphicsScene(self)) self.setDragMode(QGraphicsView.NoDrag) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) # Chart self._chart = QtCharts.QChart() self._chart.setMinimumSize(640, 480) self._chart.setTitle("Hover the line to show callout. Click the line " "to make it stay") self._chart.legend().hide() self.series = QtCharts.QLineSeries() self.series.append(1, 3) self.series.append(4, 5) self.series.append(5, 4.5) self.series.append(7, 1) self.series.append(11, 2) self._chart.addSeries(self.series) self.series2 = QtCharts.QSplineSeries() self.series2.append(1.6, 1.4) self.series2.append(2.4, 3.5) self.series2.append(3.7, 2.5) self.series2.append(7, 4) self.series2.append(10, 2) self._chart.addSeries(self.series2) self._chart.createDefaultAxes() self._chart.setAcceptHoverEvents(True) self.setRenderHint(QPainter.Antialiasing) self.scene().addItem(self._chart) self._coordX = QGraphicsSimpleTextItem(self._chart) self._coordX.setPos(self._chart.size().width() / 2 - 50, self._chart.size().height()) self._coordX.setText("X: ") self._coordY = QGraphicsSimpleTextItem(self._chart) self._coordY.setPos(self._chart.size().width() / 2 + 50, self._chart.size().height()) self._coordY.setText("Y: ") self._callouts = [] self._tooltip = Callout(self._chart) self.series.clicked.connect(self.keepCallout) self.series.hovered.connect(self.tooltip) self.series2.clicked.connect(self.keepCallout) self.series2.hovered.connect(self.tooltip) self.setMouseTracking(True)
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 createSplineChart(self): chart = QtCharts.QChart() chart.setTitle("Spline chart") name = "Series " for i, lst in enumerate(self.data_table): series = QtCharts.QSplineSeries(chart) for data in lst: series.append(data[0]) series.setName("{}{}".format(name, i)) chart.addSeries(series) chart.createDefaultAxes() chart.axisX().setRange(0, self.value_max) chart.axisY().setRange(0, self.value_count) # Add space to label to add space between labels and axis chart.axisY().setLabelFormat("%.1f ") return chart
def __init__(self, parent: Optional[QtWidgets.QWidget] = None): """Initialise a new instance of the class.""" super().__init__(parent) self.setWindowTitle("Midpoint Prices") self.instrument_series: List[QtCharts.QSplineSeries] = [ QtCharts.QSplineSeries() for _ in Instrument ] for i, line_series in enumerate(self.instrument_series): line_series.setName(Instrument(i).name) self.chart.addSeries(line_series) line_series.attachAxis(self.chart.axisX()) line_series.attachAxis(self.chart.axisY()) line_series.setColor(self._COLOURS[i]) self.__last_price: Optional[float] = None self.__timer = QtCore.QTimer(self) self.__timer.timeout.connect(self.__on_timer_tick)
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)
def set_benckmark(self, x, benckmark_list): if benckmark_list: # 初始化 if self.benckmart_list is None: self.benckmart_list = list() for benckmart in benckmark_list: new_widget = QtCharts.QChartView() height = self.size().toTuple()[1] new_widget.setFixedHeight(height / 2) new_widget.chart().setTitle(benckmart[0]) self.layout.addWidget(new_widget) color_data_series = dict() self.benckmart_list.append((new_widget, color_data_series)) for model_result in benckmart[1:]: new_data_series = QtCharts.QSplineSeries() new_data_series.setPen(QPen(model_result[1])) new_widget.chart().addSeries(new_data_series) color_data_series[model_result[1]] = [ new_data_series, model_result[0] ] # 添加点 for benckmart, chart_view_and_data_series_set in zip( benckmark_list, self.benckmart_list): chart_view, data_series_set = chart_view_and_data_series_set for model_result in benckmart[1:]: data_series, avg = data_series_set[model_result[1]] data_series.append(x, model_result[0]) # 计算平均值 data_series_count = data_series.count() if data_series_count == 0: avg = model_result[0] else: avg = (avg + model_result[0] / data_series_count ) * data_series_count / (data_series_count + 1) data_series_set[model_result[1]][1] = avg data_series.setName(str(avg)) chart_view.chart().removeSeries(data_series) chart_view.chart().addSeries(data_series) chart_view.chart().createDefaultAxes()
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 createSplineChart(data): chart = QtCharts.QChart() # chart.legend().hide() chart.setTitle("Spline chart (market shares)") axisX = QtCharts.QDateTimeAxis() # axisX.setTickCount(10); axisX.setFormat("MM-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) # seriesFilter = [0, 3, 4, 6] # seriesFilter = [0] # seriesFilter = [3, 4, 6, 7, 9, 10] seriesFilter = [3, 4] valuesToDraw = [data[1][i] for i in seriesFilter] namesToDraw = [data[2][i] for i in seriesFilter] for i in range(len(seriesFilter)): values = valuesToDraw[i] name = namesToDraw[i] series = QtCharts.QSplineSeries() series.setName(name) c1 = PySide2.QtWidgets.QColorDialog.getColor( options=PySide2.QtWidgets.QColorDialog.DontUseNativeDialog) series.setColor(c1) 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) # chart.createDefaultAxes() chartView = QtCharts.QChartView(chart) chartView.setRenderHint(QPainter.Antialiasing) return chartView
import sys from PySide2 import QtCore, QtWidgets, QtGui from PySide2.QtCharts import QtCharts if __name__ == "__main__": app = QtWidgets.QApplication([]) series = QtCharts.QSplineSeries() series.setName("spline") series.append(0, 6) series.append(2, 4) series.append(3, 8) series.append(7, 4) series.append(10, 5) series2 = QtCharts.QSplineSeries() series2.setName("spline") series2.append(0, 7) series2.append(2, 5) series2.append(3, 9) series2.append(7, 5) series2.append(10, 6) chart = QtCharts.QChart() chart.legend().hide() chart.addSeries(series) chart.addSeries(series2) chart.setTitle("Simple spline chart example") chart.createDefaultAxes() chart.axes(QtCore.Qt.Vertical)[0].setRange(0, 10) chartView = QtCharts.QChartView(chart)
def _generateChartImage(self): chart = QtCharts.QChart() chart.legend().setVisible(False) chart.setBackgroundBrush(QBrush(QColor("transparent"))) chart.setMargins(QMargins(0, 0, 0, 0)) chart.setTitleBrush(QBrush(Loader.QSSColor("@dark"))) axis_pen = QPen(Loader.QSSColor("@dark")) axis_pen.setWidth(4) grid_line_pen = QPen(Loader.QSSColor("@light-gray")) labels_font = QFont(Loader.QSSVariable("@font")) labels_font.setPointSize(18) axis_x = QtCharts.QValueAxis() axis_y = QtCharts.QValueAxis() for axis in (axis_x, axis_y): axis.setLinePen(axis_pen) axis.setLabelFormat("%d") axis.setGridLinePen(grid_line_pen) axis.setLabelsFont(labels_font) chart.addAxis(axis_x, Qt.AlignBottom) chart.addAxis(axis_y, Qt.AlignLeft) current_series = {} max_s = 0 for i, m in self._analysis.parameters().selectedMorphotypes().items(): current_series[i] = QtCharts.QSplineSeries() current_series[i].setName(m.name()) current_series[i].setColor(m.color()) s = 0 current_series[i].append(0, 0) for k, img in enumerate(self._analysis.processedImages()): s += img.detectionsCount().get(i, 0) current_series[i].append(k + 1, s) max_s = max(s, max_s) chart.addSeries(current_series[i]) current_series[i].attachAxis(axis_x) current_series[i].attachAxis(axis_y) pen = current_series[i].pen() pen.setWidth(5) current_series[i].setPen(pen) chart.axisX().setRange(0, max(len(self._analysis.processedImages()), 4)) chart.axisY().setRange(0, max(round(max_s), 4)*1.05) chart_view = QtCharts.QChartView(chart) chart_view.setRenderHint(QPainter.Antialiasing) chart_view.resize(QSize(1080, 500)) chart_pixmap = chart_view.grab() self._analysis.setBase64ChartImage(ImageConverter.QPixmapToBase64(chart_pixmap, "png"))