我想用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)开始绘制条形或误差条?
谢谢
答案 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();
}
这背后的想法是在两个图之间添加一个新的不可见图,并将误差作为两者之间距离的一半。