function pScatter::drawScatterBestFit in Visitors 7
Same name and namespace in other branches
- 7.2 pChart/class/pScatter.class.php \pScatter::drawScatterBestFit()
File
- pChart/
class/ pScatter.class.php, line 824
Class
Code
function drawScatterBestFit($Format = "") {
$Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : 0;
$Data = $this->pDataObject
->getData();
foreach ($Data["ScatterSeries"] as $Key => $Series) {
if ($Series["isDrawable"] == TRUE) {
$SerieX = $Series["X"];
$SerieValuesX = $Data["Series"][$SerieX]["Data"];
$SerieXAxis = $Data["Series"][$SerieX]["Axis"];
$SerieY = $Series["Y"];
$SerieValuesY = $Data["Series"][$SerieY]["Data"];
$SerieYAxis = $Data["Series"][$SerieY]["Axis"];
$Color = array(
"R" => $Series["Color"]["R"],
"G" => $Series["Color"]["G"],
"B" => $Series["Color"]["B"],
"Alpha" => $Series["Color"]["Alpha"],
);
$Color["Ticks"] = $Ticks;
$PosArrayX = $Data["Series"][$Series["X"]]["Data"];
$PosArrayY = $Data["Series"][$Series["Y"]]["Data"];
$Sxy = 0;
$Sx = 0;
$Sy = 0;
$Sxx = 0;
foreach ($PosArrayX as $Key => $Value) {
$X = $Value;
$Y = $PosArrayY[$Key];
$Sxy = $Sxy + $X * $Y;
$Sx = $Sx + $X;
$Sy = $Sy + $Y;
$Sxx = $Sxx + $X * $X;
}
$n = count($PosArrayX);
if ($n * $Sxx == $Sx * $Sx) {
$X1 = $this
->getPosArray($Data["Axis"][$SerieXAxis]["ScaleMin"], $SerieXAxis);
$X2 = $X1;
$Y1 = $this->pChartObject->GraphAreaY1;
$Y2 = $this->pChartObject->GraphAreaY2;
}
else {
$M = ($n * $Sxy - $Sx * $Sy) / ($n * $Sxx - $Sx * $Sx);
$B = ($Sy - $M * $Sx) / $n;
$X1 = $this
->getPosArray($Data["Axis"][$SerieXAxis]["ScaleMin"], $SerieXAxis);
$Y1 = $this
->getPosArray($M * $Data["Axis"][$SerieXAxis]["ScaleMin"] + $B, $SerieYAxis);
$X2 = $this
->getPosArray($Data["Axis"][$SerieXAxis]["ScaleMax"], $SerieXAxis);
$Y2 = $this
->getPosArray($M * $Data["Axis"][$SerieXAxis]["ScaleMax"] + $B, $SerieYAxis);
$RealM = -($Y2 - $Y1) / ($X2 - $X1);
if ($Y1 < $this->pChartObject->GraphAreaY1) {
$X1 = $X1 + ($this->pChartObject->GraphAreaY1 - $Y1 / $RealM);
$Y1 = $this->pChartObject->GraphAreaY1;
}
if ($Y1 > $this->pChartObject->GraphAreaY2) {
$X1 = $X1 + ($Y1 - $this->pChartObject->GraphAreaY2) / $RealM;
$Y1 = $this->pChartObject->GraphAreaY2;
}
if ($Y2 < $this->pChartObject->GraphAreaY1) {
$X2 = $X2 - ($this->pChartObject->GraphAreaY1 - $Y2) / $RealM;
$Y2 = $this->pChartObject->GraphAreaY1;
}
if ($Y2 > $this->pChartObject->GraphAreaY2) {
$X2 = $X2 - ($Y2 - $this->pChartObject->GraphAreaY2) / $RealM;
$Y2 = $this->pChartObject->GraphAreaY2;
}
}
$this->pChartObject
->drawLine($X1, $Y1, $X2, $Y2, $Color);
}
}
}