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]) # 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 create_series(self, dataTable, chart): # 创建折线的函数 for i, data_list in enumerate(dataTable): # [index,[list]] # 创建曲线 series = QLineSeries(chart._chart) # 设置折线名 series.setName(data_list[0]) for j, v in enumerate(data_list[1:]): # 添加折线和对应的坐标点 series.append(j, v) series.setPointsVisible(True) # 显示原点 # 鼠标悬停连接事件 series.hovered.connect(self.onSeriesHoverd) chart._chart.addSeries(series) # 添加折线到视图窗口 return chart._chart
def __drawBode(self): self.chart.removeAllSeries() #删除所有序列 ## 创建序列 pen = QPen(Qt.red) pen.setWidth(2) seriesMag = QLineSeries() #幅频曲线序列 seriesMag.setName("幅频曲线") seriesMag.setPen(pen) seriesMag.setPointsVisible(False) seriesMag.hovered.connect(self.do_seriesMag_hovered) seriesPhase = QLineSeries() #相频曲线序列 pen.setColor(Qt.blue) seriesPhase.setName("相频曲线") seriesPhase.setPen(pen) seriesPhase.setPointsVisible(True) seriesPhase.hovered.connect(self.do_seriesPhase_hovered) ## 为序列添加数据点 count = len(self.__vectW) #数据点数 for i in range(count): seriesMag.append(self.__vectW[i], self.__vectMag[i]) seriesPhase.append(self.__vectW[i], self.__VectPhase[i]) ##设置坐标轴范围 minMag = min(self.__vectMag) maxMag = max(self.__vectMag) minPh = min(self.__VectPhase) maxPh = max(self.__VectPhase) self.__axisMag.setRange(minMag, maxMag) self.__axisPhase.setRange(minPh, maxPh) ##序列添加到chart,并指定坐标轴 self.chart.addSeries(seriesMag) seriesMag.attachAxis(self.__axisFreq) seriesMag.attachAxis(self.__axisMag) self.chart.addSeries(seriesPhase) seriesPhase.attachAxis(self.__axisFreq) seriesPhase.attachAxis(self.__axisPhase) for marker in self.chart.legend().markers(): #QLegendMarker类型列表 marker.clicked.connect(self.do_LegendMarkerClicked)
def initChart(self): self._chart = QChart(title="Line Chart") self._chart.setAcceptHoverEvents(True) 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 i, data_list in enumerate(dataTable): series = QLineSeries(self._chart) for j, v in enumerate(data_list): series.append(j, v) series.setName("Series " + str(i)) series.setPointsVisible(True) # 显示原点 series.hovered.connect(self.onSeriesHoverd) self._chart.addSeries(series) self._chart.createDefaultAxes() # 创建默认的轴 self._chart.axisX().setTickCount(7) # x轴设置7个刻度 self._chart.axisY().setTickCount(7) # y轴设置7个刻度 self._chart.axisY().setRange(0, 1500) # 设置y轴范围 self.setChart(self._chart)
def _fill_chart(self, items: List[Run]): series = QLineSeries() series.setPointsVisible(True) series.setPointLabelsVisible(True) series.setPointLabelsFormat("@yPoint") series.hovered.connect(self.chart_view.show_series_tooltip) self.timestamp_by_run.clear() for run in items: date_value = calendar.timegm(run.date.timetuple()) * 1000 total_issues = run.get_total_issues() series.append(date_value, total_issues) self.timestamp_by_run[date_value] = run chart = QChart() chart.setTheme(QChart.ChartThemeDark) chart.setAnimationOptions(QChart.SeriesAnimations) chart.addSeries(series) chart.legend().hide() # No margin chart.layout().setContentsMargins(0, 0, 0, 0) chart.setBackgroundRoundness(0) axisX = QDateTimeAxis() axisX.setFormat("dd/MM/yyyy") axisX.setTitleText('Date') chart.addAxis(axisX, Qt.AlignBottom) series.attachAxis(axisX) axisY = QValueAxis() axisY.setLabelFormat('%d') axisY.setTitleText('Total issues') chart.addAxis(axisY, Qt.AlignLeft) series.attachAxis(axisY) self.chart_view.clear_all_tooltips() self.chart_view.setChart(chart)
def __init__(self): super().__init__() series = QLineSeries() series.setPointsVisible(True) series.setPointLabelsVisible(True) series.setPointLabelsFormat("(@xPoint, @yPoint)") series.hovered.connect(self.show_series_tooltip) series.append(0, 6) series.append(2, 4) series.append(3, 8) series.append(7, 4) series.append(10, 5) self._chart = QChart() self._chart.setMinimumSize(640, 480) self._chart.setTitle("Line Chart Example") self._chart.setAnimationOptions(QChart.SeriesAnimations) self._chart.legend().hide() self._chart.addSeries(series) self._chart.createDefaultAxes() self.setChart(self._chart)
def __createChart(self): ##创建图表 chart = QChart() #创建 Chart ## chart.setTitle("简单函数曲线") chart.legend().setVisible(True) self.chartView.setChart(chart) #Chart添加到chartView pen=QPen() pen.setWidth(2) ##========LineSeries折线 和 ScatterSeries散点 seriesLine = QLineSeries() seriesLine.setName("LineSeries折线") seriesLine.setPointsVisible(False) #数据点不可见 pen.setColor(Qt.red) seriesLine.setPen(pen) seriesLine.hovered.connect(self.do_series_hovered) #信号 hovered seriesLine.clicked.connect(self.do_series_clicked) #信号 clicked chart.addSeries(seriesLine) #添加到chart seriesLinePoint = QScatterSeries() #散点序列 seriesLinePoint.setName("ScatterSeries散点") shape=QScatterSeries.MarkerShapeCircle #MarkerShapeRectangle seriesLinePoint.setMarkerShape(shape) #散点形状,只有2种 seriesLinePoint.setBorderColor(Qt.yellow) seriesLinePoint.setBrush(QBrush(Qt.red)) seriesLinePoint.setMarkerSize(10) #散点大小 seriesLinePoint.hovered.connect(self.do_series_hovered) #信号 hovered seriesLinePoint.clicked.connect(self.do_series_clicked) #信号 clicked chart.addSeries(seriesLinePoint) #添加到chart ##======== SplineSeries 曲线和 QScatterSeries 散点 seriesSpLine = QSplineSeries() seriesSpLine.setName("SplineSeries曲线") seriesSpLine.setPointsVisible(False) #数据点不可见 pen.setColor(Qt.blue) seriesSpLine.setPen(pen) seriesSpLine.hovered.connect(self.do_series_hovered) #信号 hovered seriesSpLine.clicked.connect(self.do_series_clicked) #信号 clicked seriesSpPoint = QScatterSeries() #散点序列 seriesSpPoint.setName("QScatterSeries") shape=QScatterSeries.MarkerShapeRectangle #MarkerShapeCircle seriesSpPoint.setMarkerShape(shape) #散点形状,只有2种 seriesSpPoint.setBorderColor(Qt.green) seriesSpPoint.setBrush(QBrush(Qt.blue)) seriesSpPoint.setMarkerSize(10) #散点大小 seriesSpPoint.hovered.connect(self.do_series_hovered) #信号 hovered seriesSpPoint.clicked.connect(self.do_series_clicked) #信号 clicked chart.addSeries(seriesSpLine) chart.addSeries(seriesSpPoint) ## 创建缺省坐标轴 chart.createDefaultAxes() #创建缺省坐标轴并与序列关联 chart.axisX().setTitleText("time(secs)") chart.axisX().setRange(0,10) chart.axisX().applyNiceNumbers() chart.axisY().setTitleText("value") chart.axisY().setRange(-2,2) chart.axisY().applyNiceNumbers() for marker in chart.legend().markers(): #QLegendMarker类型列表 marker.clicked.connect(self.do_LegendMarkerClicked)
def initProgressChart(self, MaxTime, Allgen, PlotData, name): MinTime = 100000 for k in PlotData: if min(k[1]) < MinTime: MinTime = min(k[1]) 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(11) # x轴设置7个刻度 axisX.setGridLineVisible(False) # 隐藏从x轴往上的线条 axisY = self._chart.axisY() axisY.setTickCount(10) # y轴设置7个刻度 #axisY.setRange(0, MaxTime) # 设置y轴范围 # 自定义x轴 # axis_x = QCategoryAxis( # self._chart, labelsPosition=QCategoryAxis.AxisLabelsPositionOnValue) # axis_x.setTickCount(Allgen) # axis_x.setGridLineVisible(False) # min_x = axisX.min() # for i in range(0, Allgen + 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.AxisLabelsPositionOnValue) # axis_y.setTickCount(round(MaxTime)-max(round(MinTime)-10,0)) # axis_y.setRange(max(round(MinTime)-10,0), round(MaxTime)) # for i in range(max(round(MinTime)-10,0), round(MaxTime) + 1): # axis_y.append('%i' % i, 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)