Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. How do I render bar charts by DateTime?
Forum Updated to NodeBB v4.3 + New Features

How do I render bar charts by DateTime?

Scheduled Pinned Locked Moved Solved General and Desktop
2 Posts 2 Posters 398 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    sun_caramel
    wrote on last edited by sun_caramel
    #1

    How can I set the x-axis of a QBarSeries to QDateTimeAxis?
    I want to render the candlestick chart and the bar chart into one chart

    below code is my sample code, I will convert from python to C++

    from PyQt5.QtChart import (
        QBarCategoryAxis,
        QBarSeries,
        QBarSet,
        QCandlestickSeries,
        QCandlestickSet,
        QChart,
        QChartView,
        QDateTimeAxis,
        QScatterSeries,
        QValueAxis,
    )
    from PyQt5.QtCore import QDateTime
    from PyQt5.QtGui import QPainter
    from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow, QVBoxLayout, QWidget
    
    app = QApplication([])
    
    
    class win(QMainWindow):
        widget: QWidget = QWidget()
        layout: QVBoxLayout = QVBoxLayout()
        chartView: QChartView = QChartView()
        chart: QChart = QChart()
        label: QLabel = QLabel()
        scatter: QScatterSeries
    
        def __init__(self):
            super().__init__()
            self.setMinimumSize(600, 400)
    
            min = 1704157200 * 1000
            max = 1704160800 * 1000
            cur = 1704157800 * 1000
            minY = 49000
            maxY = 56000
            raw_data = [
                (min, 45000),
                (max, 58000),
            ]
    
            series = QCandlestickSeries()
            data = QCandlestickSet()
            data.setTimestamp(cur)
            data.setOpen(55000)
            data.setHigh(53000)
            data.setLow(54000)
            data.setClose(52000)
            series.append(data)
    
            # chart object
            chart = QChart()
            # chart.legend().hide()
    
            trade = QCandlestickSeries()
            tradeSet = QCandlestickSet()
            price = 50000
            tradeSet.setOpen(price)
            tradeSet.setClose(price)
            tradeSet.setHigh(price)
            tradeSet.setLow(price)
            tradeSet.setTimestamp(cur)
            trade.append(tradeSet)
    
            chart.addSeries(series)
            chart.addSeries(trade)
    
            test = QScatterSeries()
            test.append(cur, 49000)
    
            chart.addSeries(test)
    
            # bar chart
    
            bars = QBarSeries()
            curTime = QDateTime.fromMSecsSinceEpoch(cur)
            for i in range(7):
                sets = QBarSet(curTime.toString("h:mm"))
                sets.append(50750)
                bars.append(sets)
    
            chart.addSeries(bars)
    
            y = QValueAxis()
            x = QDateTimeAxis()
    
            z = QBarCategoryAxis()
    
            chart.setAxisX(x, series)
            chart.setAxisY(y, series)
    
            chart.setAxisX(x, trade)
            chart.setAxisY(y, trade)
    
            chart.setAxisX(x, test)
            chart.setAxisY(y, test)
    
            chart.setAxisX(z, bars)
            chart.setAxisY(y, bars)
    
            y.setMax(maxY)
            y.setMin(minY)
            y.setLabelFormat("%i")
    
            x.setMin(QDateTime.fromMSecsSinceEpoch(min))
            x.setMax(QDateTime.fromMSecsSinceEpoch(max))
            x.setFormat("h:mm")
            x.setTickCount(7)
    
            # displaying chart
            chart_view = QChartView(chart)
            chart_view.setRenderHint(QPainter.Antialiasing)
            self.setCentralWidget(chart_view)
    
    
    w = win()
    w.show()
    app.exec_()
    
    
    Pl45m4P 1 Reply Last reply
    0
    • S sun_caramel

      How can I set the x-axis of a QBarSeries to QDateTimeAxis?
      I want to render the candlestick chart and the bar chart into one chart

      below code is my sample code, I will convert from python to C++

      from PyQt5.QtChart import (
          QBarCategoryAxis,
          QBarSeries,
          QBarSet,
          QCandlestickSeries,
          QCandlestickSet,
          QChart,
          QChartView,
          QDateTimeAxis,
          QScatterSeries,
          QValueAxis,
      )
      from PyQt5.QtCore import QDateTime
      from PyQt5.QtGui import QPainter
      from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow, QVBoxLayout, QWidget
      
      app = QApplication([])
      
      
      class win(QMainWindow):
          widget: QWidget = QWidget()
          layout: QVBoxLayout = QVBoxLayout()
          chartView: QChartView = QChartView()
          chart: QChart = QChart()
          label: QLabel = QLabel()
          scatter: QScatterSeries
      
          def __init__(self):
              super().__init__()
              self.setMinimumSize(600, 400)
      
              min = 1704157200 * 1000
              max = 1704160800 * 1000
              cur = 1704157800 * 1000
              minY = 49000
              maxY = 56000
              raw_data = [
                  (min, 45000),
                  (max, 58000),
              ]
      
              series = QCandlestickSeries()
              data = QCandlestickSet()
              data.setTimestamp(cur)
              data.setOpen(55000)
              data.setHigh(53000)
              data.setLow(54000)
              data.setClose(52000)
              series.append(data)
      
              # chart object
              chart = QChart()
              # chart.legend().hide()
      
              trade = QCandlestickSeries()
              tradeSet = QCandlestickSet()
              price = 50000
              tradeSet.setOpen(price)
              tradeSet.setClose(price)
              tradeSet.setHigh(price)
              tradeSet.setLow(price)
              tradeSet.setTimestamp(cur)
              trade.append(tradeSet)
      
              chart.addSeries(series)
              chart.addSeries(trade)
      
              test = QScatterSeries()
              test.append(cur, 49000)
      
              chart.addSeries(test)
      
              # bar chart
      
              bars = QBarSeries()
              curTime = QDateTime.fromMSecsSinceEpoch(cur)
              for i in range(7):
                  sets = QBarSet(curTime.toString("h:mm"))
                  sets.append(50750)
                  bars.append(sets)
      
              chart.addSeries(bars)
      
              y = QValueAxis()
              x = QDateTimeAxis()
      
              z = QBarCategoryAxis()
      
              chart.setAxisX(x, series)
              chart.setAxisY(y, series)
      
              chart.setAxisX(x, trade)
              chart.setAxisY(y, trade)
      
              chart.setAxisX(x, test)
              chart.setAxisY(y, test)
      
              chart.setAxisX(z, bars)
              chart.setAxisY(y, bars)
      
              y.setMax(maxY)
              y.setMin(minY)
              y.setLabelFormat("%i")
      
              x.setMin(QDateTime.fromMSecsSinceEpoch(min))
              x.setMax(QDateTime.fromMSecsSinceEpoch(max))
              x.setFormat("h:mm")
              x.setTickCount(7)
      
              # displaying chart
              chart_view = QChartView(chart)
              chart_view.setRenderHint(QPainter.Antialiasing)
              self.setCentralWidget(chart_view)
      
      
      w = win()
      w.show()
      app.exec_()
      
      
      Pl45m4P Offline
      Pl45m4P Offline
      Pl45m4
      wrote on last edited by
      #2

      @sun_caramel said in How do I render bar charts by DateTime?:

      How can I set the x-axis of a QBarSeries to QDateTimeAxis?

      The documentation says:

      QDateTimeAxis can be used with any QXYSeries. To add a data point to the series, QDateTime::toMSecsSinceEpoch() is used

      Since QBarSeries is not a QXYSeries it wont work just like this


      If debugging is the process of removing software bugs, then programming must be the process of putting them in.

      ~E. W. Dijkstra

      1 Reply Last reply
      1
      • S sun_caramel has marked this topic as solved on

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved