Add back central line for linear regression

Signed-off-by: Robert C. Helling <helling@atdotde.de>
This commit is contained in:
Robert C. Helling 2021-01-12 21:27:16 +01:00
parent d6712bc5ac
commit 25cfd852b9
2 changed files with 10 additions and 0 deletions

View file

@ -725,12 +725,16 @@ void StatsView::QuartileMarker::updatePosition()
StatsView::RegressionLine::RegressionLine(const struct regression_data reg, QBrush brush, QGraphicsScene *scene, StatsAxis *xAxis, StatsAxis *yAxis) :
item(createItemPtr<QGraphicsPolygonItem>(scene)),
central(createItemPtr<QGraphicsPolygonItem>(scene)),
xAxis(xAxis), yAxis(yAxis),
reg(reg)
{
item->setZValue(ZValues::chartFeatures);
item->setPen(Qt::NoPen);
item->setBrush(brush);
central->setZValue(ZValues::chartFeatures+1);
central->setPen(QPen(Qt::red));
}
void StatsView::RegressionLine::updatePosition()
@ -740,6 +744,10 @@ void StatsView::RegressionLine::updatePosition()
auto [minX, maxX] = xAxis->minMax();
auto [minY, maxY] = yAxis->minMax();
QPolygonF line;
line << QPoint(xAxis->toScreen(minX), yAxis->toScreen(reg.a * minX + reg.b))
<< QPoint(xAxis->toScreen(maxX), yAxis->toScreen(reg.a * maxX + reg.b));
// Draw the confidence interval according to http://www2.stat.duke.edu/~tjl13/s101/slides/unit6lec3H.pdf p.5 with t*=2 for 95% confidence
QPolygonF poly;
for (double x = minX; x <= maxX + 1; x += (maxX - minX) / 100)
@ -751,6 +759,7 @@ void StatsView::RegressionLine::updatePosition()
QRectF box(QPoint(xAxis->toScreen(minX), yAxis->toScreen(minY)), QPoint(xAxis->toScreen(maxX), yAxis->toScreen(maxY)));
item->setPolygon(poly.intersected(box));
central->setPolygon(line.intersected(box));
}
StatsView::HistogramMarker::HistogramMarker(double val, bool horizontal, QPen pen, QGraphicsScene *scene, StatsAxis *xAxis, StatsAxis *yAxis) :

View file

@ -126,6 +126,7 @@ private:
// A regression line
struct RegressionLine {
std::unique_ptr<QGraphicsPolygonItem> item;
std::unique_ptr<QGraphicsPolygonItem> central;
StatsAxis *xAxis, *yAxis;
const struct regression_data reg;
void updatePosition();