示例#1
0
 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)
示例#2
0
    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
示例#3
0
    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)
示例#4
0
 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)
示例#5
0
    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)
示例#7
0
   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)
示例#8
0
    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)