如何绘制在x轴左右移动的轨迹的图形?

时间:2019-05-15 16:23:16

标签: c++ qcustomplot

我想在停车场中用汽车的x和y绘制轨迹。

x中的轨迹并不总是在同一方向上。有时汽车会向左走。

这里的问题是:有时(并非总是如此!)图形将不会在x轴上左移。您可以在图像https://imgur.com/Z53fNkt

上看到两个不同的结果

知道为什么吗?

左图是我所期望的。右边是相同的值,但我继续绘制数据的时间更长。

void TrackingResultsView::setupTrajectoryPlot()
{
QCustomPlot *customPlot = ui->qcp_trajectory;

customPlot->xAxis2->setVisible(true);
customPlot->xAxis2->setLabel("X-Position (pixel)");
customPlot->xAxis2->setRange(0, mModelPtr->frameSize().width());
customPlot->xAxis2->grid()->setVisible(true);

customPlot->xAxis->setRange(0, mModelPtr->frameSize().width());
customPlot->yAxis->setLabel("Y-Position (pixel)");
customPlot->yAxis->setRange(0, mModelPtr->frameSize().height());
customPlot->yAxis->setRangeReversed(true);

customPlot->yAxis2->setVisible(true);
customPlot->yAxis2->setRange(0, mModelPtr->frameSize().height());
customPlot->yAxis2->grid()->setVisible(true);
customPlot->yAxis2->setRangeReversed(true);
customPlot->addGraph(customPlot->xAxis2, customPlot->yAxis);

QVector<QVector<double>> data = createDataMap(mModelPtr->points());
customPlot->graph()->setData(data.at(0), data.at(1), true);

setTheme(customPlot, false);
}

谢谢

(英语不是我的第一语言)

2 个答案:

答案 0 :(得分:0)

QCPGraph似乎用于每个键只有值的排序数据。从QCustomPlot文档中看来,QCPCurve似乎是更好的匹配方式,以便绘制轨迹图(相同键的多个值)。

根据QCPCurve的描述:

  

与QCPGraph不同,这种类型的绘图表可能具有多个具有相同键坐标的点,因此它们的视觉表示可以具有循环。这是通过引入第三个坐标t来实现的,该坐标定义了其他两个坐标x和y所描述的点的顺序。

答案 1 :(得分:0)

这里有我的新代码,提供了很多帮助。它的工作!

QCustomPlot *customPlot = ui->qcp_trajectory;

customPlot->xAxis2->setVisible(true);
customPlot->xAxis2->setLabel("X-Position (pixel)");
customPlot->xAxis2->setRange(0, mModelPtr->frameSize().width());
customPlot->xAxis2->grid()->setVisible(true);

customPlot->xAxis->setRange(0, mModelPtr->frameSize().width());
customPlot->yAxis->setLabel("Y-Position (pixel)");
customPlot->yAxis->setRange(0, mModelPtr->frameSize().height());
customPlot->yAxis->setRangeReversed(true);

customPlot->yAxis2->setVisible(true);
customPlot->yAxis2->setRange(0, mModelPtr->frameSize().height());
customPlot->yAxis2->grid()->setVisible(true);
customPlot->yAxis2->setRangeReversed(true);

customPlot->addGraph(customPlot->xAxis2, customPlot->yAxis);

// create empty curve objects:
QCPCurve *trajectory = new QCPCurve(customPlot->xAxis2, customPlot->yAxis);

// generate the curve data points:
const int pointCount = mModelPtr->points().size();
QVector<QCPCurveData> datatrajectory(pointCount);
QVector<QVector<double>> data = createDataMap(mModelPtr->points());

for (int i = 0; i < pointCount ; ++i)
{
    datatrajectory[i] = QCPCurveData(i, data.at(0).at(i), data.at(1).at(i));

}

trajectory->data()->set(datatrajectory, true);
setTheme(customPlot, false);