Qt Charts,如何根据其值来缩放轴

时间:2017-04-06 05:22:05

标签: qt charts axis scaling

我设置了大约600对x和y值,应该绘制。它们被读作CSV文件的双打

void ChartView::getData4Series()
{
QFile file(QCoreApplication::applicationDirPath() + "/../saveData/" + m_videoPath + "/" + "SaveDisplace.csv");
if (!file.open(QIODevice::ReadOnly))
{
    QMessageBox::information(0, "error", file.errorString());
}
QTextStream in(&file);
QString line;
QStringList fields;

QtCharts::QScatterSeries* series = new QtCharts::QScatterSeries;
m_seriesTy->clear();
m_seriesTz->clear();
bool checkforChar ;
while (!in.atEnd())
{
    line = in.readLine();
    fields = line.split(";");
    fields[2].toDouble(&checkforChar);
    if (checkforChar)
    {
        if (fields[2].toDouble() <= 100.0 && fields[2].toDouble() >= -5000.0)
        {
            if (fields[6].toDouble() > -100000.0)
            {
                m_seriesTy->append(fields[2].toDouble(), (fields[3].toDouble() - fields[6].toDouble()));
                m_seriesTz->append(fields[2].toDouble(), (fields[4].toDouble() - fields[7].toDouble()));
            }
        }
    }

}
file.close();
}

我通过设置轴来设置图表,给定限制并添加另一行(仅2个值对)作为参考。

void ChartView::setZErrorCharts(QtCharts::QScatterSeries* series)
{
series->setMarkerSize(8);
QtCharts::QValueAxis *xAxis = new QtCharts::QValueAxis;
QtCharts::QValueAxis *yAxis = new QtCharts::QValueAxis;
xAxis->setRange(-5000, 0);
yAxis->setRange(-500, 500);

QtCharts::QLineSeries* lineSeries = new QtCharts::QLineSeries;
lineSeries->append(qreal(0), qreal(0));
lineSeries->append(qreal(-5000), qreal(0));

m_chartTzError = new QtCharts::QChart();

m_chartTzError->setAxisX(xAxis);
m_chartTzError->setAxisY(yAxis);
m_chartTzError->setTitle("tz error ");

m_chartTzError->legend()->hide();
m_chartTzError->addSeries(series);
m_chartTzError->addSeries(lineSeries);  

}

我能看到的是,轴的值不适合绘制的值的实际值。 我还将值绘制为标签,它们也与x和y轴值不同。 如何安排轴的缩放。我尝试用顺序弄乱,在添加数据系列之前设置轴的范围,反之亦然。 红色圆圈标记的值应为0左右,但大约为-200。 enter image description here 知道如何解决这个问题。 Qt参考似乎没有帮助。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并以此方式解决了该问题:

  1. 您首先需要创建轴。例如:

    touch
  2. 然后创建您的系列”:
        QLineSeries *系列=新的QLineSeries(图表);
        series-> append(x,y);

  3. 将系列添加到图表中:
       chart-> addSeries(series);

  4. 最后,将右轴连接到该系列:
       系列-> attachAxis(axisX);
       series-> attachAxis(axisY);

现在绘制时:

QLogValueAxis *axisX = new QLogValueAxis();  
axisX->setTitleText("Frequency [Hz]");  
axisX->setRange(200, 8000);  
axisX->setMinorGridLineVisible(true);  
axisX->setMinorTickCount(10);  
chart->addAxis(axisX, Qt::AlignBottom);  

QValueAxis *axisY = new QValueAxis();  
axisY->setRange(20, 150);  
axisY->setTitleText("dB");  
chart->addAxis(axisY, Qt::AlignLeft);  

一切都应该在正确的范围内。
我认为,决定性的步骤是在将序列添加到图表时附加正确的对应轴。