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. QtCharts auto range for y-axis
Forum Updated to NodeBB v4.3 + New Features

QtCharts auto range for y-axis

Scheduled Pinned Locked Moved Solved General and Desktop
6 Posts 3 Posters 10.5k 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.
  • G Offline
    G Offline
    Gokhan
    wrote on last edited by
    #1

    Hi everyone,
    I would like to change automatically y-axis for the dynamic plot. I changed the dynamic plot example in examples and have appended lots of points and after a new point was appended, it should set its y-axis for maximum value. Is it possible this automatically?

    artwawA 1 Reply Last reply
    0
    • G Gokhan

      Hi everyone,
      I would like to change automatically y-axis for the dynamic plot. I changed the dynamic plot example in examples and have appended lots of points and after a new point was appended, it should set its y-axis for maximum value. Is it possible this automatically?

      artwawA Offline
      artwawA Offline
      artwaw
      wrote on last edited by
      #2

      @Gokhan Never done that but I imagine that's what models are for.

      For more information please re-read.

      Kind Regards,
      Artur

      G 1 Reply Last reply
      0
      • artwawA artwaw

        @Gokhan Never done that but I imagine that's what models are for.

        G Offline
        G Offline
        Gokhan
        wrote on last edited by
        #3
        This post is deleted!
        1 Reply Last reply
        0
        • G Offline
          G Offline
          Gokhan
          wrote on last edited by
          #4

          I also had written this topic in stackoverflow,eyllanesc answered and gave an example about it, perhaps it helps someone.
          Link : Solution

          alt text

          chart.h

          #ifndef CHART_H
          #define CHART_H
          
          #include <QtCharts/QChart>
          #include <QtCore/QTimer>
          
          QT_CHARTS_BEGIN_NAMESPACE
          class QSplineSeries;
          class QValueAxis;
          QT_CHARTS_END_NAMESPACE
          
          QT_CHARTS_USE_NAMESPACE
          
          //![1]
          class Chart: public QChart
          {
              Q_OBJECT
          public:
              Chart(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0);
              virtual ~Chart();
          
          public slots:
              void handleTimeout();
          
          private:
              QTimer m_timer;
              QSplineSeries *m_series;
              QStringList m_titles;
              QValueAxis *m_axis;
              qreal m_step;
              qreal m_x;
              qreal m_y;
              //new variables
              qreal yMin;
              qreal yMax;
          };
          //![1]
          

          chart.cpp

          #include "chart.h"
          #include <QtCharts/QAbstractAxis>
          #include <QtCharts/QSplineSeries>
          #include <QtCharts/QValueAxis>
          #include <QtCore/QTime>
          #include <QtCore/QDebug>
          
          Chart::Chart(QGraphicsItem *parent, Qt::WindowFlags wFlags):
              QChart(QChart::ChartTypeCartesian, parent, wFlags),
              m_series(0),
              m_axis(new QValueAxis),
              m_step(0),
              m_x(5),
              m_y(1)
          {
              qsrand((uint) QTime::currentTime().msec());
          
              QObject::connect(&m_timer, SIGNAL(timeout()), this, SLOT(handleTimeout()));
              m_timer.setInterval(1000);
          
              m_series = new QSplineSeries(this);
          
              QPen green(Qt::red);
              green.setWidth(3);
              m_series->setPen(green);
              m_series->append(m_x, m_y);
          
              addSeries(m_series);
              createDefaultAxes();
              setAxisX(m_axis, m_series);
              m_axis->setTickCount(5);
          
              yMax = 10;
              yMin = -5;
          
              axisX()->setRange(0, 10);
              axisY()->setRange(yMin, yMax);
          
              connect(m_series, &QSplineSeries::pointAdded, [=](int index){
                  qreal y = m_series->at(index).y();
          
                  if(y< yMin || y > yMax){
                      if(y < yMin)
                          yMin = y;
                      if(y> yMax)
                          yMax = y;
                      axisY()->setRange(yMin-20, yMax+20);
                  }
          
              });
          
              m_timer.start();
          }
          
          Chart::~Chart()
          {
          
          }
          
          void Chart::handleTimeout()
          {
              qreal x = plotArea().width() / m_axis->tickCount();
              qreal y = (m_axis->max() - m_axis->min()) / m_axis->tickCount();
              m_x += y;
              //m_y = qrand() % 5 - 2.5;
              m_y = 50*(qrand() % 5 - 2.5);
              m_series->append(m_x, m_y);
              scroll(x, 0);
              if (m_x == 100)
                  m_timer.stop();
          }
          
          1 Reply Last reply
          4
          • G Offline
            G Offline
            Gokhan
            wrote on last edited by Gokhan
            #5

            I have tried to add time axis for the x-axis, but I can't. It's time always is the same so it's not changing. Why?

             m_series->append(QDateTime::currentDateTime().toMSecsSinceEpoch(), m_y);
            

            alt text

            1 Reply Last reply
            0
            • J Offline
              J Offline
              JB Tristant
              wrote on last edited by
              #6

              The post is old, but I use that :

                  m_dateTimeAxisX->setMax(QDateTime::currentDateTime());
                  m_dateTimeAxisX->setMin(QDateTime::currentDateTime().addSecs(-m_scaleInSec));
              
              1 Reply Last reply
              0

              • Login

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