我设置了大约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。 知道如何解决这个问题。 Qt参考似乎没有帮助。
答案 0 :(得分:0)
我遇到了同样的问题,并以此方式解决了该问题:
您首先需要创建轴。例如:
touch
然后创建您的系列”:
QLineSeries *系列=新的QLineSeries(图表);
series-> append(x,y);
将系列添加到图表中:
chart-> addSeries(series);
最后,将右轴连接到该系列:
系列-> 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);
一切都应该在正确的范围内。
我认为,决定性的步骤是在将序列添加到图表时附加正确的对应轴。