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())
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)
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)
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)
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)
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)
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)