def createAreaChart(self): chart = QChart() chart.setTitle("Area chart") # The lower series is initialized to zero values. lowerSeries = None y_points = [] for i, data_list in enumerate(self.m_dataTable): upperSeries = QLineSeries(chart) for j, (value, _) in enumerate(data_list): y = value.y() if lowerSeries is None: upperSeries.append(QPointF(j, y)) y_points.append(y) else: new_y = y_points[i] + y upperSeries.append(QPointF(j, new_y)) y_points[j] += new_y area = QAreaSeries(upperSeries, lowerSeries) area.setName("Series " + str(i)) chart.addSeries(area) lowerSeries = upperSeries chart.createDefaultAxes() return chart
def __init__(self): super().__init__() series = QLineSeries() for date, value in DATA: date_value = QDateTime(*date, 0, 0).toMSecsSinceEpoch() series.append(date_value, value) chart = QChart() chart.setTheme(QChart.ChartThemeDark) chart.setTitle("Line Chart with Date Example") chart.setAnimationOptions(QChart.SeriesAnimations) chart.addSeries(series) chart.legend().hide() axisX = QDateTimeAxis() axisX.setFormat("dd/MM/yyyy") axisX.setTitleText('Date') chart.addAxis(axisX, Qt.AlignBottom) series.attachAxis(axisX) axisY = QValueAxis() axisY.setTitleText('Value') chart.addAxis(axisY, Qt.AlignLeft) series.attachAxis(axisY) chart_view = QChartView() chart_view.setChart(chart) chart_view.setRenderHint(QPainter.Antialiasing) self.setCentralWidget(chart_view)
def createAreaChart(self): chart = QChart() chart.setTitle("Area chart") # The lower series is initialized to zero values. lowerSeries = None y_points = [] for i, data_list in enumerate(self.m_dataTable): upperSeries = QLineSeries(chart) for j, (value, _) in enumerate(data_list): y = value.y() if lowerSeries is None: upperSeries.append(QPointF(j, y)) y_points.append(y) else: new_y = y_points[i] + y upperSeries.append(QPointF(j, new_y)) y_points[j] += new_y area = QAreaSeries(upperSeries, lowerSeries) area.setName("Series " + str(i)) chart.addSeries(area) lowerSeries = upperSeries chart.createDefaultAxes() return chart
def __init__(self): super().__init__() # window size self.setMinimumSize(600, 400) # data raw_data = [ (0, 6), (2, 4), (3, 8), (7, 4), (10, 5), (11, 1), (13, 3), (17, 6), (18, 3), (20, 2) ] series = QLineSeries() for d in raw_data: series.append(*d) # chart object chart = QChart() chart.legend().hide() chart.addSeries(series) # data feeding chart.createDefaultAxes() # displaying chart chart_view = QChartView(chart) chart_view.setRenderHint(QPainter.Antialiasing) self.setCentralWidget(chart_view)
def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("Demo12_1, QChart 基本绘图") self.resize(580, 420) chart = QChart() chart.setTitle("简单函数曲线") chartView = QChartView(self) chartView.setChart(chart) self.setCentralWidget(chartView) series0 = QLineSeries() series1 = QLineSeries() series0.setName("sin曲线") series1.setName("cos曲线") chart.addSeries(series0) chart.addSeries(series1) t = 0 intv = 0.1 pointCount = 100 for i in range(pointCount): y1 = math.cos(t) series0.append(t, y1) y2 = 1.5 * math.sin(t + 20) series1.append(t, y2) t = t + intv axisX = QValueAxis() axisX.setRange(0, 10) axisX.setTitleText("time(secs)") axisY = QValueAxis() axisY.setRange(-2, 2) axisY.setTitleText("value") chart.setAxisX(axisX, series0) chart.setAxisY(axisY, series0) chart.setAxisX(axisX, series1) chart.setAxisY(axisY, series1)
def setupChart(self): """Set up the GUI's series and chart.""" # Collect x and y data values from the CSV file x_values, y_values = self.loadCSVFile() # Get the largest x and y values; Used for setting the chart's axes x_max, y_max = max(x_values), max(y_values) # Create numpy arrays from the x and y values x_values = np.array(x_values) y_values = np.array(y_values) # Calculate the regression line coefficients = linearRegression(x_values, y_values) # Create chart object chart = QChart() chart.setTitle("Auto Insurance for Geographical Zones in Sweden") chart.legend().hide() # Create scatter series and add points to the series scatter_series = QScatterSeries() scatter_series.setName("DataPoints") scatter_series.setMarkerSize(9.0) scatter_series.hovered.connect(self.displayPointInfo) for value in range(0, self.row_count - 1): scatter_series.append(x_values[value], y_values[value]) scatter_series.setBorderColor(QColor('#000000')) # Create line series and add points to the series line_series = QLineSeries() line_series.setName("RegressionLine") # Calculate the regression line for x in x_values: y_pred = coefficients[0] + coefficients[1] * x line_series.append(x, y_pred) # Add both series to the chart and create x and y axes chart.addSeries(scatter_series) chart.addSeries(line_series) chart.createDefaultAxes() axis_x = chart.axes(Qt.Horizontal) axis_x[0].setTitleText("Number of Claims") axis_x[0].setRange(0, x_max) axis_x[0].setLabelFormat("%i") axis_y = chart.axes(Qt.Vertical) axis_y[0].setTitleText( "Total Payment in Swedish Kronor (in thousands)") axis_y[0].setRange(0, y_max + 20) # Create QChartView object for displaying the chart chart_view = QChartView(chart) v_box = QVBoxLayout() v_box.addWidget(chart_view) self.setLayout(v_box)
def drawD2(self): if self.vtkViewer.reader == None: return num = self.inputD2.text() try: num = list(map(int, num.split(' '))) except Exception: return if len(num) != 2 or num[0] <= 1 or num[1] <= 1: return self.clear() histogram, scale = self.vtkViewer.d2Sample(num[0], num[1]) d2Chart = QChart() d2Chart.legend().hide() polyline = QPolygonF(num[0]) pointer = polyline.data() dtype, tinfo = np.float, np.finfo pointer.setsize(2*polyline.size()*tinfo(dtype).dtype.itemsize) memory = np.frombuffer(pointer, dtype) memory[:(num[0]-1)*2+1:2] = scale memory[1:(num[0]-1)*2+2:2] = histogram curve = QLineSeries() curve.append(polyline) d2Chart.addSeries(curve) d2Chart.createDefaultAxes() ChartView = QChartView(d2Chart) self.d2ChartLayout.addWidget(ChartView)
def add_new_data(self, data: dict): self.x += self.time.msec() self.time.start() if self.x > 10000: self.ax.setRange(self.x - 10000, self.x) for key in data: try: value = float(data[key]) except ValueError: continue if value > self.ymax: self.ymax = value self.ay.setRange(self.ymin, self.ymax) elif value < self.ymin: self.ymin = value self.ay.setRange(self.ymin, self.ymax) if key in self.lines: if self.lines[key].__len__() >= 32: # self.lines[key].replace(0,self.x, value) self.lines[key].remove(0) # else: self.lines[key].append(self.x, value) else: # ls = QSplineSeries(self) ls = QLineSeries(self) ls.append(self.x, value) ls.setColor( QColor(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))) ls.setName(key) self.chart().addSeries(ls) self.chart().setAxisX(self.ax, ls) self.chart().setAxisY(self.ay, ls) self.lines[key] = ls
def add_series(self, x_list, y_list, name): series = QLineSeries() series.setName(name) for x, y in zip(x_list, y_list): series.append(x, y) self.model.addSeries(series) self.model.createDefaultAxes()
def initChart(self, NumSection, Alltime, PlotData, name): self._chart = QChart(title=name) self._chart.setAcceptHoverEvents(True) # Series动画 self._chart.setAnimationOptions(QChart.SeriesAnimations) # dataTable = [ # ["邮件营销", [120, 132, 101, 134, 90, 230]], # ["联盟广告", [220, 182, 191, 234, 290, 330, 310]], # ["视频广告", [150, 232, 201, 154, 190, 330, 410]], # ["直接访问", [320, 332, 301, 334, 390, 330, 320]], # ["搜索引擎", [820, 932, 901, 934, 1290, 1330, 1320]] # ] for series_name, data_list, label_list in PlotData: series = QLineSeries(self._chart) for j, v in zip(label_list, data_list): series.append(j, v) series.setName(series_name) series.setPointsVisible(True) # 显示圆点 series.hovered.connect(self.handleSeriesHoverd) # 鼠标悬停 self._chart.addSeries(series) self._chart.createDefaultAxes() # 创建默认的轴 axisX = self._chart.axisX() # x轴 axisX.setTickCount(Alltime) # x轴设置7个刻度 axisX.setGridLineVisible(False) # 隐藏从x轴往上的线条 axisY = self._chart.axisY() axisY.setTickCount(NumSection) # y轴设置7个刻度 axisY.setRange(0, NumSection) # 设置y轴范围 # 自定义x轴 axis_x = QCategoryAxis( self._chart, labelsPosition=QCategoryAxis.AxisLabelsPositionOnValue) axis_x.setTickCount(Alltime + 1) axis_x.setGridLineVisible(False) min_x = axisX.min() for i in range(0, Alltime + 1): axis_x.append(str(i), min_x + i) self._chart.setAxisX(axis_x, self._chart.series()[-1]) # 自定义y轴 axis_y = QCategoryAxis( self._chart, labelsPosition=QCategoryAxis.AxisLabelsPositionCenter) axis_y.setTickCount(NumSection) axis_y.setRange(0, NumSection) for i in range(0, NumSection + 1): axis_y.append('section%i' % (NumSection - i + 1), i) self._chart.setAxisY(axis_y, self._chart.series()[-1]) # chart的图例 legend = self._chart.legend() # 设置图例由Series来决定样式 legend.setMarkerShape(QLegend.MarkerShapeFromSeries) # 遍历图例上的标记并绑定信号 for marker in legend.markers(): # 点击事件 marker.clicked.connect(self.handleMarkerClicked) # 鼠标悬停事件 marker.hovered.connect(self.handleMarkerHovered) self.setChart(self._chart)
def initChart(self): self._chart = QChart(title="农业大棚数据监测曲线") self._chart.setAcceptHoverEvents(True) # Series动画 self._chart.setAnimationOptions(QChart.SeriesAnimations) dataTable = [["大棚湿度", []], ["大棚温度", []], ["大棚二氧化碳浓度", []]] data = pd.read_csv("data/data.csv") list = data.values.tolist() for i in range(30): dataTable[0][1].append(list[i * 60][3]) dataTable[1][1].append(list[i * 60][4]) dataTable[2][1].append(list[i * 60][5]) # dataTable = [ # ["邮件营销", [120, 132, 101, 134, 90, 230, 210]], # ["直接访问", [320, 332, 301, 334, 390, 330, 320]], # ["搜索引擎", [820, 932, 901, 934, 1290, 1330, 1320]] # ] for series_name, data_list in dataTable: series = QLineSeries(self._chart) for j, v in enumerate(data_list): series.append(j, v) series.setName(series_name) series.setPointsVisible(True) # 显示圆点 series.hovered.connect(self.handleSeriesHoverd) # 鼠标悬停 self._chart.addSeries(series) self._chart.createDefaultAxes() # 创建默认的轴 axisX = self._chart.axisX() # x轴 axisX.setTickCount(30) # x轴设置30个刻度 axisX.setGridLineVisible(False) # 隐藏从x轴往上的线条 axisY = self._chart.axisY() axisY.setTickCount(10) # y轴设置10个刻度 axisY.setRange(0, 100) # 设置y轴范围 # 自定义x轴 axis_x = QCategoryAxis( self._chart, labelsPosition=QCategoryAxis.AxisLabelsPositionOnValue) axis_x.setTickCount(30) axis_x.setGridLineVisible(False) min_x = axisX.min() max_x = axisX.max() step = (max_x - min_x) / (30 - 1) # 7个tick for i in range(0, 30): axis_x.append(self.category[i], min_x + i * step) self._chart.setAxisX(axis_x, self._chart.series()[-1]) # chart的图例 legend = self._chart.legend() # 设置图例由Series来决定样式 legend.setMarkerShape(QLegend.MarkerShapeFromSeries) # 遍历图例上的标记并绑定信号 for marker in legend.markers(): # 点击事件 marker.clicked.connect(self.handleMarkerClicked) # 鼠标悬停事件 marker.hovered.connect(self.handleMarkerHovered) self.setChart(self._chart)
def getChart(title): chart = QChart(title=title) for i, data_list in enumerate(m_dataTable): series = QLineSeries(chart) for value, _ in data_list: series.append(*value) series.setName("Series " + str(i)) chart.addSeries(series) chart.createDefaultAxes() # 创建默认的轴 return chart
class ChartWidget(QWidget): def __init__(self, parent=None, ticker="BTC"): super().__init__(parent) uic.loadUi("chart.ui", self) self.ticker = ticker self.viewLimit = 128 self.priceData = QLineSeries() self.priceChart = QChart() self.priceChart.addSeries(self.priceData) self.priceChart.legend().hide() axisX = QDateTimeAxis() axisX.setFormat("hh:mm:ss") axisX.setTickCount(4) dt = QDateTime.currentDateTime() axisX.setRange(dt, dt.addSecs(self.viewLimit)) axisY = QValueAxis() axisY.setVisible(False) self.priceChart.addAxis(axisX, Qt.AlignBottom) self.priceChart.addAxis(axisY, Qt.AlignRight) self.priceData.attachAxis(axisX) self.priceData.attachAxis(axisY) self.priceChart.layout().setContentsMargins(0, 0, 0, 0) self.priceView.setChart(self.priceChart) self.priceView.setRenderHints(QPainter.Antialiasing) # ----------------- 추 가 ------------------ self.pw = PriceWorker(ticker) self.pw.dataSent.connect(self.appendData) self.pw.start() # ------------------------------------------ def appendData(self, currPirce): if len(self.priceData) == self.viewLimit: self.priceData.remove(0) dt = QDateTime.currentDateTime() self.priceData.append(dt.toMSecsSinceEpoch(), currPirce) self.__updateAxis() def __updateAxis(self): pvs = self.priceData.pointsVector() dtStart = QDateTime.fromMSecsSinceEpoch(int(pvs[0].x())) if len(self.priceData) == self.viewLimit: dtLast = QDateTime.fromMSecsSinceEpoch(int(pvs[-1].x())) else: dtLast = dtStart.addSecs(self.viewLimit) ax = self.priceChart.axisX() ax.setRange(dtStart, dtLast) ay = self.priceChart.axisY() dataY = [v.y() for v in pvs] ay.setRange(min(dataY), max(dataY))
def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("Demo12_1, QChart基本绘图") self.resize(580, 420) #创建chart和chartView chart = QChart() #创建 Chart chart.setTitle("简单函数曲线") chartView = QChartView(self) #创建 ChartView chartView.setChart(chart) #Chart添加到ChartView self.setCentralWidget(chartView) #创建曲线序列 series0 = QLineSeries() series1 = QLineSeries() series0.setName("Sin曲线") series1.setName("Cos曲线") chart.addSeries(series0) #序列添加到图表 chart.addSeries(series1) #序列添加数值 t = 0 intv = 0.1 pointCount = 100 for i in range(pointCount): y1 = math.cos(t) series0.append(t, y1) y2 = 1.5 * math.sin(t + 20) series1.append(t, y2) t = t + intv ##创建坐标轴 axisX = QValueAxis() #X 轴 axisX.setRange(0, 10) #设置坐标轴范围 axisX.setTitleText("time(secs)") #标题 ## axisX.setLabelFormat("%.1f") #标签格式 ## axisX.setTickCount(11) #主分隔个数 ## axisX.setMinorTickCount(4) ## axisX.setGridLineVisible(false) axisY = QValueAxis() #Y 轴 axisY.setRange(-2, 2) axisY.setTitleText("value") ## axisY.setTickCount(5) ## axisY.setMinorTickCount(4) ## axisY.setLabelFormat("%.2f") #标签格式 ## axisY.setGridLineVisible(false) #为序列设置坐标轴 chart.setAxisX(axisX, series0) #为序列设置坐标轴 chart.setAxisY(axisY, series0) chart.setAxisX(axisX, series1) #为序列设置坐标轴 chart.setAxisY(axisY, series1)
def add_data(self, xdata, ydata, color): curve = QLineSeries() pen = curve.pen() pen.setColor(color) pen.setWidthF(.1) curve.setPen(pen) curve.setUseOpenGL(True) curve.append(series_to_polyline(xdata, ydata)) self.chart.addSeries(curve) self.chart.createDefaultAxes() self.ncurves += 1
def on_run_pb_clicked(self): self.chart.removeAllSeries() min_function = 421.0 ga_answer = 0.0 correct = 0 incorrect = 0 ga = Ga(self.population_sb.value(), self.crossover_dsb.value(), self.mutation_dsb.value(), self.generation_sb.value(), self.elitism_cb.isChecked()) progress_dialog = QProgressDialog('Repetitions...', 'Cancel', 0, self.repetitions_sb.value(), self.window) progress_dialog.setWindowModality(Qt.WindowModal) ga_output = () for i in range(self.repetitions_sb.value()): ga_output = ga.run_generation() ga_answer = ga_output[0] if ga_answer == min_function: correct += 1 else: incorrect += 1 progress_dialog.setValue(i) if progress_dialog.wasCanceled(): break progress_dialog.setValue(self.repetitions_sb.value()) if self.single_run_rb.isChecked(): self.x_result_l.setText(str(ga_answer)) self.fx_l.setText('{0:.2f}'.format(ga.calc_function(ga_answer))) if ga_answer == min_function: self.icon_result_l.setPixmap('correct-icon.png') else: self.icon_result_l.setPixmap('incorrect-icon.png') # Graph series_1 = QLineSeries() series_1.setName('Average Fit') series_2 = QLineSeries() series_2.setName('Best Fit') for i in range(len(ga_output[1])): series_1.append(ga_output[1][i], ga_output[2][i]) series_2.append(ga_output[1][i], ga_output[3][i]) self.chart.addSeries(series_1) self.chart.addSeries(series_2) self.chart.createDefaultAxes() else: self.correct_results_l.setText(str(correct)) self.incorrect_results_l.setText(str(incorrect))
def fill_series(self, data): series = QLineSeries() series.setPointsVisible(True) xf = data[0] yf = data[1] for i in range(len(xf)): series.append(xf[i], yf[i]) return series
class Window(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("PyQtChart Demo") self.setGeometry(500, 275, 650, 500) self.show() self.createLineChart() def createLineChart(self): self.font = QFont("Arial") self.font.setPixelSize(16) self.font.setBold(True) self.pen = QPen(QColor(0, 153, 0)) self.pen.setWidth(3) self.series = QLineSeries(self) self.series.setPen(self.pen) self.x = np.arange(0, 2 * np.pi, 0.01) for i in self.x: self.series.append(i, np.sin(i)) self.chart = QChart() self.chart.addSeries(self.series) self.chart.setAnimationOptions(QChart.SeriesAnimations) self.chart.setTitleFont(self.font) self.chart.setTitleBrush(QBrush(Qt.blue)) self.chart.setTitle("Line Chart Demo") self.chart.legend().setVisible(True) self.chart.legend().setAlignment(Qt.AlignBottom) self.chartview = QChartView(self.chart) self.chartview.setRenderHint(QPainter.Antialiasing) self.axisX = QValueAxis() self.axisX.setRange(0, 2 * np.pi) self.axisX.setTickCount(6) self.axisX.setLabelFormat("%.1f") self.axisX.setTitleText("x") self.axisY = QValueAxis() self.axisY.setRange(0, 100) self.axisY.setLabelFormat("%d") self.axisY.setTitleText("sin(x)") self.chart.addAxis(self.axisX, Qt.AlignBottom) self.chart.addAxis(self.axisY, Qt.AlignLeft) self.setCentralWidget(self.chartview)
def createSeries(self, dataArray): series = QLineSeries() for i in range(len(dataArray)): value = QPointF(i, dataArray[i][0]) series.append(value) series.setColor(QColor(0, 255, 0)) self.removeSeries() series.setName("灰度图") self.qchart.addSeries(series) self.lastSeries = series
def __drawComparisonChart(self): self.__comparison_chart.removeAllSeries() series1 = QLineSeries(self) series2 = QLineSeries(self) series1.setName("Оптимальный") series2.setName("Другой") [(series1.append(i[0], i[1]), series2.append(i[0], i[2])) for i in self.__values] self.__comparison_chart.addSeries(series1) self.__comparison_chart.addSeries(series2) self.__comparison_chart.createDefaultAxes()
def test_generations(): range_a = float(str(form.input_a_test.text())) range_b = float(str(form.input_b_test.text())) precision = int(str(form.input_d_test.text())) generations = int(str(form.input_generations_test.text())) app.setOverrideCursor(QtCore.Qt.WaitCursor) start = time() result = test_generation(range_a, range_b, precision, generations) app.restoreOverrideCursor() chart = QChart() series = QLineSeries() form.test_table.setRowCount(0) form.test_table.insertRow(0) item = QtWidgets.QTableWidgetItem("iteracje") item.setTextAlignment(QtCore.Qt.AlignCenter) form.test_table.setItem(0, 0, item) item = QtWidgets.QTableWidgetItem("wystąpienia") item.setTextAlignment(QtCore.Qt.AlignCenter) form.test_table.setItem(0, 1, item) item = QtWidgets.QTableWidgetItem("%") item.setTextAlignment(QtCore.Qt.AlignCenter) form.test_table.setItem(0, 2, item) for i in range(0, generations): percent = sum(result[:i+1])/100000*100 series.append(i+1, percent) form.test_table.insertRow(i+1) form.test_table.setItem(i+1, 0, QtWidgets.QTableWidgetItem(str(i+1))) form.test_table.setItem(i+1, 1, QtWidgets.QTableWidgetItem(str(result[i]))) form.test_table.setItem(i+1, 2, QtWidgets.QTableWidgetItem(str(round(percent, 2)))) chart.addSeries(series) chart.setBackgroundBrush(QtGui.QColor(41, 43, 47)) chart.createDefaultAxes() chart.legend().hide() chart.setContentsMargins(-10, -10, -10, -10) chart.layout().setContentsMargins(0, 0, 0, 0) chart.axisX().setTickCount(10) chart.axisY().setRange(0, 100) chart.axisY().setTickCount(11) chart.axisX().setLabelsColor(QtGui.QColor("white")) chart.axisY().setLabelsColor(QtGui.QColor("white")) form.widget_test.setChart(chart)
def create_linechart(self): series = QLineSeries(self) for i in range(512): series.append(i, int.from_bytes(self.trace[i], "big")) self.osc_chart = QChart() self.osc_chart.addSeries(series) self.osc_chart.createDefaultAxes() self.osc_chart.setAnimationOptions(QChart.SeriesAnimations) self.osc_chart.setTitle("ESP32 Oscilloscope") self.osc_chart.legend().setVisible(True) self.osc_chart.legend().setAlignment(Qt.AlignBottom) self.osc_screen.setChart(self.osc_chart)
def right_down_add_init(self): self.chart = QChart() self.chart.setTitle("Line Chart 1") series = QLineSeries(self.chart) series.append(0, 6) series.append(2, 4) self.chart.addSeries(series) self.chart.setBackgroundVisible(False) self.chart.createDefaultAxes() # 创建默认轴 self.view = QChartView(self.chart) self.view.setRenderHint(QPainter.Antialiasing) # 抗锯齿 self.right_down_layout.addWidget(self.view, 0, 0, 1, 1) series.append(1, 4)
def get_line_series(self): """ TODO:订单管理界面点击统计调用该函数,计算订单管理界面当前搜索范围内 每天 的订单销售总额, 然后范围内 第一天 作为 第0天 即 i=0 按顺序以以下格式放入 series 和 category 中,series.append(i, 第 i 天销售额) category.append('20-7-07') <- 那天具体的日期 """ totals, category = self.database.stat_1(*self.data) series = QLineSeries() for i in range(len(category)): series.append(i, totals[i]) if len(category) == 1: series.append(0, 0) return series, category
class ChartView(QChartView): def __init__(self): QChartView.__init__(self) #self.resize(300, 300) self.setRenderHint(QPainter.Antialiasing) # 抗锯齿 self.chart = QChart() self.seriesAcc = QLineSeries() self.seriesAcc.setName(CONF.leftUpNames[0]) self.chart.addSeries(self.seriesAcc) #声明并初始化X轴,Y轴 self.dtaxisX = QValueAxis() self.vlaxisY = QValueAxis() #设置坐标轴显示范围 self.dtaxisX.setMin(0) #self.dtaxisX.setMax(100) self.vlaxisY.setMin(0) #self.vlaxisY.setMax(100) self.dtaxisX.setTickCount(3) self.vlaxisY.setTickCount(3) #设置坐标轴名称 self.dtaxisX.setTitleText(CONF.leftUpNames[1]) self.vlaxisY.setTitleText(CONF.leftUpNames[2]) #设置网格不显示 self.vlaxisY.setGridLineVisible(False) #把坐标轴添加到chart中 self.chart.addAxis(self.dtaxisX, Qt.AlignBottom) self.chart.addAxis(self.vlaxisY, Qt.AlignLeft) self.seriesAcc.attachAxis(self.dtaxisX) self.seriesAcc.attachAxis(self.vlaxisY) self.initUI() def initUI(self): self.backend = BackendThread() self.backend.update_line.connect(self.handleLine) self.backend.start() def handleLine(self, data): if data[0] == 0: self.seriesAcc.clear() else: self.dtaxisX.setMax(data[0]) self.vlaxisY.setMax(data[0]) self.seriesAcc.clear() self.seriesAcc.append(0, 0) self.seriesAcc.append(data[0], data[1]) self.setChart(self.chart)
def initChart(self): self._chart = QChart(title="折线图堆叠") self._chart.setAcceptHoverEvents(True) # Series动画 self._chart.setAnimationOptions(QChart.SeriesAnimations) dataTable = [["邮件营销", [120, 132, 101, 134, 90, 230, 210]], ["联盟广告", [220, 182, 191, 234, 290, 330, 310]], ["视频广告", [150, 232, 201, 154, 190, 330, 410]], ["直接访问", [320, 332, 301, 334, 390, 330, 320]], ["搜索引擎", [820, 932, 901, 934, 1290, 1330, 1320]]] for series_name, data_list in dataTable: series = QLineSeries(self._chart) for j, v in enumerate(data_list): series.append(j, v) series.setName(series_name) series.setPointsVisible(True) # 显示圆点 series.hovered.connect(self.handleSeriesHoverd) # 鼠标悬停 self._chart.addSeries(series) self._chart.createDefaultAxes() # 创建默认的轴 axisX = self._chart.axisX() # x轴 axisX.setTickCount(7) # x轴设置7个刻度 axisX.setGridLineVisible(False) # 隐藏从x轴往上的线条 axisY = self._chart.axisY() axisY.setTickCount(7) # y轴设置7个刻度 axisY.setRange(0, 1500) # 设置y轴范围 # 自定义x轴 axis_x = QCategoryAxis( self._chart, labelsPosition=QCategoryAxis.AxisLabelsPositionOnValue) axis_x.setTickCount(7) axis_x.setGridLineVisible(False) min_x = axisX.min() max_x = axisX.max() step = (max_x - min_x) / (7 - 1) # 7个tick for i in range(0, 7): axis_x.append(self.category[i], min_x + i * step) self._chart.setAxisX(axis_x, self._chart.series()[-1]) # self._chart.addAxis(axis_x, Qt.AlignBottom) # chart的图例 legend = self._chart.legend() # 设置图例由Series来决定样式 legend.setMarkerShape(QLegend.MarkerShapeFromSeries) # 遍历图例上的标记并绑定信号 for marker in legend.markers(): # 点击事件 marker.clicked.connect(self.handleMarkerClicked) # 鼠标悬停事件 marker.hovered.connect(self.handleMarkerHovered) self.setChart(self._chart)
def createLineChart(self): chart = QChart() chart.setTitle("Line chart") for i, data_list in enumerate(self.m_dataTable): series = QLineSeries(chart) for value, _ in data_list: series.append(value) series.setName("Series " + str(i)) chart.addSeries(series) chart.createDefaultAxes() return chart
def createLineChart(self): chart = QChart() chart.setTitle("Line chart") for i, data_list in enumerate(self.m_dataTable): series = QLineSeries(chart) for value, _ in data_list: series.append(value) series.setName("Series " + str(i)) chart.addSeries(series) chart.createDefaultAxes() return chart
def add_data(self, data, chart, color=None): curve = QLineSeries(chart) curve.setName("latency") pen = curve.pen() if color is not None: pen.setColor(color) pen.setWidthF(1) curve.setPen(pen) curve.setUseOpenGL(True) for x in data: curve.append(x[0], x[1]) # curve.append(series_to_polyline(xdata, ydata)) chart.addSeries(curve) chart.createDefaultAxes() return curve
def rewrite_data(self, args): self.layout = QVBoxLayout() self.grid.addLayout(self.layout, 0, 0, 1, 1) for key, value in self.data[args].items(): chart = QChart() chart_view = QChartView(chart) series = QLineSeries() series.setName(key) for i in value: series.append(QPointF(i[0], i[1])) chart.addSeries(series) chart.createDefaultAxes() self.layout.addWidget(chart_view)
def XLineSeries(data_dict, key_order=None, xkey = None, openGL=False): if key_order == None: key_order = data_dict.keys() series = [] if xkey == None: xkey = list(key_order)[0] for key in key_order-xkey: set = QLineSeries(); set.setName(key) if openGL: set.setUseOpenGL(True) for i, (itemx, itemy) in enumerate(zip_longest(data_dict[xkey],data_dict[key])): set.append(itemx, itemy) series.append(set) return series
def addSeries( self, _x2idx: typing.Dict, _idx2x: list, _chart: QChart, _axis_x: QValueAxis, _axis_y: QValueAxis ): series = QLineSeries() series.setName(self.name) for x, y in zip(self.x_list, self.y_list): series.append(_x2idx[x], y) if self.color is not None: series.setColor(self.color) _chart.addSeries(series) _chart.setAxisX(_axis_x, series) _chart.setAxisY(_axis_y, series) if self.show_value: self.createShow()