Ejemplo n.º 1
0
    def add_series(self,name,columns):
        self.series = QtChart.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 = QtCore.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 = QtChart.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,QtCore.Qt.AlignBottom)
        self.series.attachAxis(self.axis_x)

        self.axis_y = QtChart.QValueAxis()
        self.axis_y.setTickCount(10)
        self.axis_y.setLabelFormat("%.2f")
        self.axis_y.setTitleText("Magnitude")
        self.chart.addAxis(self.axis_y,QtCore.Qt.AlignLeft)
        self.series.attachAxis(self.axis_y)

        self.model.color = "{}".format(self.series.pen().color().name())
Ejemplo n.º 2
0
    def plot_clicked(self):
        """

        :return:
        """

        if self.__data is None:
            QtWidgets.QMessageBox.critical(self, "Error Plotting Data",
                                           "Need to import data first.")
            return

        psi_series = QtChart.QLineSeries()
        psi_series.setName("Pressure")
        for ts, p in self.__data.pressure.iteritems():
            psi_series.append(time.mktime(ts.timetuple()) * 1000, p)

        temp_series = QtChart.QLineSeries()
        temp_series.setName("Temperature")
        for ts, t in self.__data.temperature.iteritems():
            temp_series.append(time.mktime(ts.timetuple()) * 1000, t)

        chart = QtChart.QChart()
        chart.addSeries(psi_series)
        chart.addSeries(temp_series)

        x_axis = QtChart.QDateTimeAxis()
        x_axis.setTickCount(10)
        x_axis.setFormat("HH:mm:ss")
        x_axis.setTitleText("Time")
        chart.addAxis(x_axis, QtCore.Qt.AlignBottom)
        psi_series.attachAxis(x_axis)

        psi_axis = QtChart.QValueAxis()
        psi_axis.setLabelFormat("%i")
        psi_axis.setTitleText("Pressure (psi)")
        chart.addAxis(psi_axis, QtCore.Qt.AlignLeft)
        psi_series.attachAxis(psi_axis)

        temp_axis = QtChart.QValueAxis()
        temp_axis.setLabelFormat("%.2f")
        temp_axis.setTitleText("Temperature (C)")
        chart.addAxis(temp_axis, QtCore.Qt.AlignLeft)
        temp_series.attachAxis(temp_axis)

        chart.setTitle("Pressure Test %s" % (self.testReportLineEdit.text()))

        view = QtChart.QChartView(chart)
        view.setRenderHint(QtGui.QPainter.Antialiasing)

        dialog = QtWidgets.QDialog(self)
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(view)
        dialog.setLayout(layout)
        dialog.resize(1000, 800)

        dialog.show()
    def _setup_axi(self):
        """
        Creates and formats the x and y axis
        """
        self.x_axis = QtChart.QDateTimeAxis()
        self.x_axis.setFormat('mm:ss')
        self.x_axis.setTitleText('Time')
        self.x_axis.setTickCount(5)

        self.y_axis = QtChart.QValueAxis()
        self.y_axis.setTitleText('Count')
        self.y_axis.setRange(0, self._max_count)
        self.y_axis.setTickCount(6)
Ejemplo n.º 4
0
    def __init__(self, *args, **kwargs):
        super(BuyTimelineChartCont, self).__init__(*args, **kwargs)

        # chart
        self.chart = qtchart.QChart()
        # self.chart.legend().hide()
        self.chart.legend().setAlignment(qt.AlignRight)
        self.chart.legend().setLabelColor(
            style.myStyle.getQColor("TEXT_NORMAL"))
        self.chart.setBackgroundVisible(False)

        # date axis
        self.xAxis = qtchart.QDateTimeAxis()
        self.xAxis.setTickCount(10)
        self.xAxis.setFormat("dd MM yy")
        self.xAxis.setGridLineColor(
            style.myStyle.getQColor("BACKGROUND_BITDARK"))
        self.xAxis.setLinePenColor(
            style.myStyle.getQColor("BACKGROUND_BITDARK"))
        self.xAxis.setLabelsColor(style.myStyle.getQColor("TEXT_NORMAL"))
        self.chart.addAxis(self.xAxis, qt.AlignBottom)

        # balance axis
        self.yAxisBalance = qtchart.QValueAxis()
        self.yAxisBalance.setLabelFormat("%.2f")
        self.yAxisBalance.setGridLineColor(
            style.myStyle.getQColor("BACKGROUND_BITDARK"))
        self.yAxisBalance.setLinePenColor(
            style.myStyle.getQColor("BACKGROUND_BITDARK"))
        self.chart.addAxis(self.yAxisBalance, qt.AlignLeft)

        # price axis
        self.yAxisPrice = qtchart.QValueAxis()
        self.yAxisPrice.setLabelFormat("%.2f")
        self.yAxisPrice.setGridLineColor(
            style.myStyle.getQColor("BACKGROUND_BITDARK"))
        self.yAxisPrice.setLinePenColor(
            style.myStyle.getQColor("BACKGROUND_BITDARK"))
        self.chart.addAxis(self.yAxisPrice, qt.AlignRight)

        # chartview
        self.chartView = qtchart.QChartView(self.chart)
        self.chartView.setRenderHint(qtgui.QPainter.Antialiasing)

        self.layout = qtwidgets.QHBoxLayout(self)
        self.layout.addWidget(self.chartView)
        self.layout.setContentsMargins(0, 0, 0, 0)
Ejemplo n.º 5
0
    def __init__(self, idx):
        super().__init__()

        startDateTime = qtc.QDateTime(2020, 2, 1, 15, 30)
        endDateTime = qtc.QDateTime(2020, 2, 1, 16, 00)

        chartTitle = CsvReader(startDateTime, endDateTime)._headers[idx]
        seriesTitle = chartTitle.split()[0]

        # Create QChart object
        chart = qtch.QChart(title=chartTitle)
        self.setChart(chart)

        # Create series object
        self.series = qtch.QSplineSeries(name=seriesTitle)
        chart.addSeries(self.series)
        #self.series.setColor(qtg.QColor('red'))

        if idx == 7:
            self.irSeries = qtch.QSplineSeries(name='Infrared')
            chart.addSeries(self.irSeries)
            self.visSeries = qtch.QSplineSeries(name='Visible Light')
            chart.addSeries(self.visSeries)
            self.fsSeries = qtch.QSplineSeries(name='Full Spectrum')
            chart.addSeries(self.fsSeries)

        # setup the axes
        self.xAxis = qtch.QDateTimeAxis()
        self.yAxis = qtch.QValueAxis()
        chart.setAxisX(self.xAxis, self.series)
        chart.setAxisY(self.yAxis, self.series)

        if idx == 7:
            chart.setAxisX(self.xAxis, self.irSeries)
            chart.setAxisY(self.yAxis, self.irSeries)
            chart.setAxisX(self.xAxis, self.visSeries)
            chart.setAxisY(self.yAxis, self.visSeries)
            chart.setAxisX(self.xAxis, self.fsSeries)
            chart.setAxisY(self.yAxis, self.fsSeries)

        # As we are using curves there is one appearance optimization to do:
        self.setRenderHint(qtg.QPainter.Antialiasing)
Ejemplo n.º 6
0
 def updateSeriesOnChart(self):
     self.removeAllSeries()
     trade_series = QtChart.QLineSeries()
     trade_series.setColor(QtCore.Qt.darkGreen)
     if len(sharedData.tradePairTrades.value) > 2:
         series = []
         for v in sharedData.tradePairTrades.value:
             date = int(v['timestamp']) * 1000
             value = float(v['price'])
             trade_series.append(date, value)
             series.append((date, value))
         # print(series)
         self.addSeries(trade_series)
         self.setTitle(f"{sharedData.marketURLSelectedByUser.upper()}")
         trade_series.setName(sharedData.tradePairSelectedByUser)
     else:
         self.setTitle("<market name>")
         trade_series.setName("<coin_pair>")
     self.createDefaultAxes()
     axis_x = QtChart.QDateTimeAxis()
     axis_x.setFormat("dd-MMM hh:mm")
     axis_x.setTickCount(7)
     self.setAxisX(axis_x, trade_series)
Ejemplo n.º 7
0
    def __init__(self,
                 parent,
                 value_label_format="%i",
                 date_time_format="hh:mm"):
        super().__init__(parent)

        self.chart = QtChart.QChart()
        self.chart.setTheme(QtChart.QChart.ChartThemeDark)
        self.chart.setMargins(QtCore.QMargins(0, 0, 0, 0))
        self.chart.setBackgroundVisible(False)
        self.chart.legend().hide()

        self.value_series = QtChart.QLineSeries()
        self.lower_series = QtChart.QLineSeries()
        area_series = QtChart.QAreaSeries(self.value_series, self.lower_series)
        self.chart.addSeries(area_series)

        axis_x = QtChart.QDateTimeAxis()
        axis_x.setFormat(date_time_format)
        axis_x.setTitleText("Time")
        self.chart.addAxis(axis_x, QtCore.Qt.AlignBottom)
        area_series.attachAxis(axis_x)

        axis_y = QtChart.QValueAxis()
        axis_y.setLabelFormat(value_label_format)
        axis_y.setTitleText("Value")
        self.chart.addAxis(axis_y, QtCore.Qt.AlignLeft)
        area_series.attachAxis(axis_y)

        self.chart_view = QtChart.QChartView(self.chart)
        self.chart_view.setRenderHint(QtGui.QPainter.Antialiasing)

        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(self.chart_view)
        self.setLayout(layout)

        self.resize(800, 500)
Ejemplo n.º 8
0
    def __init__(self, weather_points: List[Weather], settings, main_ui):
        QtWidgets.QWidget.__init__(self)

        # set up  window style and size
        # frameless modal window fullscreen (same as main ui)
        self.setWindowFlags(Qt.WindowType(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint))
        self.setWindowModality(Qt.WindowModal)
        self.setGeometry(main_ui.geometry())

        # create series from weather points
        series = QtChart.QLineSeries(self)
        self._weather_points = weather_points

        # sort weather points dataset?

        for point in weather_points:
            series.append(QtCore.QPointF(point.date_time.timestamp() * 1000, point.temp))

        self.begin_hour = (min([point.date_time for point in weather_points])).timestamp() * 1000
        self.end_hour = (max([point.date_time for point in weather_points])).timestamp() * 1000
        # get min and max temp
        min_temp = min([point.temp for point in weather_points])
        max_temp = max([point.temp for point in weather_points])

        # start displaying from -20 - so that the icons have enough space
        begin_temp = min_temp - 20

        # this is a dummy which marks the bottom of the areas series - so we can color the whole thing
        series_dummy = QtChart.QLineSeries(self)
        series_dummy.append(self.begin_hour, begin_temp)
        series_dummy.append(self.end_hour, begin_temp)

        area = QtChart.QAreaSeries(series, series_dummy)
        area.setBrush(QtGui.QColor(self.AREA_COLOR))

        # init a generic font
        font = QtGui.QFont()
        font.setPixelSize(16)

        # PointLabels do not work on area - we need to draw both
        series.setPointLabelsVisible(True)
        series.setPointLabelsColor(Qt.white)
        series.setPointLabelsFont(font)
        series.setPointLabelsFormat("@yPoint")
        series.setPointLabelsClipping(True)

        # draw a dashed line at the first tick of y axis
        pen = QtGui.QPen(Qt.DashLine)
        pen.setColor(Qt.white)
        pen.setStyle(Qt.DashLine)
        dashed_line_series = QtChart.QLineSeries(self)  # QSplineSeries()
        dashed_line_series.setPen(pen)
        self.first_tick = round((max_temp - round(begin_temp)) / (5 - 1) +
                                round(begin_temp), 1)  # chart.axisY().tickCount()

        dashed_line_series.append(QtCore.QPointF(self.begin_hour, self.first_tick))
        dashed_line_series.append(QtCore.QPointF(self.end_hour, self.first_tick))

        # chart setup
        chart = QtChart.QChart()
        self._chart = chart
        chart.addSeries(series)
        chart.addSeries(area)
        chart.addSeries(dashed_line_series)

        # visual style
        chart.legend().setVisible(False)
        chart.setTitle(f"{settings.get(LOCATION)} " +
                       common.get_localized_date(weather_points[0].date_time, settings))
        font.setPixelSize(24)
        chart.setTitleFont(font)

        # chart axis
        chart.createDefaultAxes()
        chart.axisY().setTitleText("Temperature [Celsius]")
        chart.axisY().setGridLineVisible(False)
        chart.axisY().setVisible(False)
        chart.axisY().setLineVisible(False)

        chart.axisY(series).setRange(begin_temp, round(max_temp) + 5)

        chart.axisX().setRange(self.begin_hour - 1800000, self.end_hour + 1800000)
        axisX = QtChart.QDateTimeAxis()
        axisX.setFormat("h:mm")
        chart.setAxisX(axisX, series)
        chart.axisX().setGridLineVisible(False)

        # gradient for background
        gradient = QtGui.QLinearGradient(0, 0, 0, self.height())
        gradient.setColorAt(0, QtGui.QColor(13, 119, 167))  # light blue
        gradient.setColorAt(1, QtGui.QColor(115, 158, 201))  # lighetr blue
        pen = QtGui.QPen()
        pen.setColor(QtGui.QColor(Qt.transparent))
        brush = QtGui.QBrush(gradient)
        brush.setStyle(Qt.LinearGradientPattern)
        chart.setBackgroundBrush(brush)
        geo = main_ui.geometry()
        chart.setGeometry(geo.x(), geo.y(), SCREEN_WIDTH, SCREEN_HEIGHT)

        # display on a chart view
        chart_view = QtChart.QChartView(chart)
        self._chart_view = chart_view
        chart_view.setRenderHint(QtGui.QPainter.Antialiasing)
        chart_view.setSizeAdjustPolicy(QtChart.QChartView.AdjustToContents)

        # Button to close
        ok_button = QtWidgets.QPushButton("OK", self)
        ok_button.clicked.connect(self.close)

        self._layout = QtWidgets.QVBoxLayout(self)
        self._layout.setGeometry(geo)
        self._layout.setSizeConstraint(QtWidgets.QLayout.SetMinAndMaxSize)

        self._layout.addWidget(chart_view)
        self._layout.addWidget(ok_button)

        self.installEventFilter(self)