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

4

我有大约600对x和y值需要绘制。它们以double形式从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。有什么解决办法吗?Qt参考似乎没有帮助。
1个回答

2

我曾经遇到同样的问题,解决方法如下:

  1. You create the axes which you need first. For example:

    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);  
    
  2. Then, you create your series':
    QLineSeries *series = new QLineSeries(chart);
    series->append(x,y);

  3. Add the series to your chart:
    chart->addSeries(series);

  4. Finally, attach the right axis to the series:
    series->attachAxis(axisX);
    series->attachAxis(axisY);

现在当你绘制它时:

ui->chart_view->setChart(chart);  

一切都应该按照正确的比例来展示。
我认为关键的步骤是在将系列添加到图表时附加正确的对应轴。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接