QCustomPlot在两个函数之间绘制残差

时间:2016-11-14 21:00:25

标签: c++ qcustomplot

我想用qcustomplot在离散点处绘制两个函数之间的残差。

我知道位置(x),起始值y.at(x)和height.at(x)。

到目前为止我所拥有的是带有y + -error的错误栏:

QCPErrorBars *errorBars = new QCPErrorBars(customPlot->xAxis, customPlot->yAxis);
errorBars->setDataPlottable(customPlot->graph(0));
QVector<double> y1err(x.size());
for (int i = 0; i<x.size(); ++i)
{
    y1err[i] = y.at(i) * error;
}
customPlot->graph(0)->setData(QVector<double>::fromStdVector(x), QVector<double>::fromStdVector(y));
errorBars->setData(y1err);

或从零开始的栏:

QCPBars *newBars = new QCPBars(customPlot->xAxis, customPlot->yAxis);
std::vector<double> xData, yData;
for (auto i = 0; i < x.size(); ++i)
{
    xData.push_back(i+1);
    yData.push_back(y.at(i));
}
newBars->setData(QVector<double>::fromStdVector(x), QVector<double>::fromStdVector(y));

但我真正想要的是某种从y.at(x)值开始的图,除了两个x-y图之外还有点x处残滓的高度。 如何使用height.at(x)从y.at(x)开始绘制条形或误差条?

谢谢

1 个答案:

答案 0 :(得分:0)

对于遇到此问题的其他人,我找到了某种解决方案。

void QLinePlot::AddResiduumData(std::vector<double> x, std::vector<double> y_mid, std::vector<double> y_res)
{
customPlot->addGraph();
++graphCountI;

QCPErrorBars *errorBars = new QCPErrorBars(customPlot->xAxis, customPlot->yAxis);
errorBars->setDataPlottable(customPlot->graph(graphCountI - 1));
customPlot->graph(graphCountI - 1)->setData(QVector<double>::fromStdVector(x), QVector<double>::fromStdVector(y_mid));
customPlot->graph(graphCountI - 1)->setVisible(false);
errorBars->setData(QVector<double>::fromStdVector(y_res));
customPlot->replot();
}

这背后的想法是在两个图之间添加一个新的不可见图,并将误差作为两者之间距离的一半。