View unanswered posts | View active topics It is currently Thu Mar 28, 2024 8:14 pm



Reply to topic  [ 2 posts ] 
drawScatterScal function LabelSkip,LastLabel,LabelingMethod 
Author Message
New pChart user
New pChart user

Joined: Thu Oct 27, 2011 12:28 pm
Posts: 2
Post drawScatterScal function LabelSkip,LastLabel,LabelingMethod
This change happened in version 2.1.3!

LabelSkip: Skipped labels
LastLabel: If you do not see the last label, then it displays.
LabelingMethod: Labeling method

Code:
function drawScatterScale($Format="")
    {
     $Mode      = isset($Format["Mode"]) ? $Format["Mode"] : SCALE_MODE_FLOATING;
     $Floating      = isset($Format["Floating"]) ? $Format["Floating"] : FALSE;
     $XLabelsRotation   = isset($Format["XLabelsRotation"]) ? $Format["XLabelsRotation"] : 90;
     $MinDivHeight   = isset($Format["MinDivHeight"]) ? $Format["MinDivHeight"] : 20;
     $Factors      = isset($Format["Factors"]) ? $Format["Factors"] : array(1,2,5);
     $ManualScale   = isset($Format["ManualScale"]) ? $Format["ManualScale"] : array("0"=>array("Min"=>-100,"Max"=>100));
     $XMargin      = isset($Format["XMargin"]) ? $Format["XMargin"] : 0;
     $YMargin      = isset($Format["YMargin"]) ? $Format["YMargin"] : 0;
     $ScaleSpacing   = isset($Format["ScaleSpacing"]) ? $Format["ScaleSpacing"] : 15;
     $InnerTickWidth   = isset($Format["InnerTickWidth"]) ? $Format["InnerTickWidth"] : 2;
     $OuterTickWidth   = isset($Format["OuterTickWidth"]) ? $Format["OuterTickWidth"] : 2;
     $DrawXLines   = isset($Format["DrawXLines"]) ? $Format["DrawXLines"] : ALL;
     $DrawYLines   = isset($Format["DrawYLines"]) ? $Format["DrawYLines"] : ALL;
     $GridTicks      = isset($Format["GridTicks"]) ? $Format["GridTicks"] : 4;
     $GridR      = isset($Format["GridR"]) ? $Format["GridR"] : 255;
     $GridG      = isset($Format["GridG"]) ? $Format["GridG"] : 255;
     $GridB      = isset($Format["GridB"]) ? $Format["GridB"] : 255;
     $GridAlpha      = isset($Format["GridAlpha"]) ? $Format["GridAlpha"] : 40;
     $AxisRo      = isset($Format["AxisR"]) ? $Format["AxisR"] : 0;
     $AxisGo      = isset($Format["AxisG"]) ? $Format["AxisG"] : 0;
     $AxisBo      = isset($Format["AxisB"]) ? $Format["AxisB"] : 0;
     $AxisAlpha      = isset($Format["AxisAlpha"]) ? $Format["AxisAlpha"] : 100;
     $TickRo      = isset($Format["TickR"]) ? $Format["TickR"] : 0;
     $TickGo      = isset($Format["TickG"]) ? $Format["TickG"] : 0;
     $TickBo      = isset($Format["TickB"]) ? $Format["TickB"] : 0;
     $TickAlpha      = isset($Format["TickAlpha"]) ? $Format["TickAlpha"] : 100;
     $DrawSubTicks   = isset($Format["DrawSubTicks"]) ? $Format["DrawSubTicks"] : FALSE;
     $InnerSubTickWidth   = isset($Format["InnerSubTickWidth"]) ? $Format["InnerSubTickWidth"] : 0;
     $OuterSubTickWidth   = isset($Format["OuterSubTickWidth"]) ? $Format["OuterSubTickWidth"] : 2;
     $SubTickR      = isset($Format["SubTickR"]) ? $Format["SubTickR"] : 255;
     $SubTickG      = isset($Format["SubTickG"]) ? $Format["SubTickG"] : 0;
     $SubTickB      = isset($Format["SubTickB"]) ? $Format["SubTickB"] : 0;
     $SubTickAlpha   = isset($Format["SubTickAlpha"]) ? $Format["SubTickAlpha"] : 100;
     $XReleasePercent   = isset($Format["XReleasePercent"]) ? $Format["XReleasePercent"] : 1;
     $DrawArrows   = isset($Format["DrawArrows"]) ? $Format["DrawArrows"] : FALSE;
     $ArrowSize         = isset($Format["ArrowSize"]) ? $Format["ArrowSize"] : 8;
     $CycleBackground   = isset($Format["CycleBackground"]) ? $Format["CycleBackground"] : FALSE;
     $BackgroundR1   = isset($Format["BackgroundR1"]) ? $Format["BackgroundR1"] : 255;
     $BackgroundG1   = isset($Format["BackgroundG1"]) ? $Format["BackgroundG1"] : 255;
     $BackgroundB1   = isset($Format["BackgroundB1"]) ? $Format["BackgroundB1"] : 255;
     $BackgroundAlpha1   = isset($Format["BackgroundAlpha1"]) ? $Format["BackgroundAlpha1"] : 10;
     $BackgroundR2   = isset($Format["BackgroundR2"]) ? $Format["BackgroundR2"] : 230;
     $BackgroundG2   = isset($Format["BackgroundG2"]) ? $Format["BackgroundG2"] : 230;
     $BackgroundB2   = isset($Format["BackgroundB2"]) ? $Format["BackgroundB2"] : 230;
     $BackgroundAlpha2   = isset($Format["BackgroundAlpha2"]) ? $Format["BackgroundAlpha2"] : 10;
   
    $LabelingMethod   = isset($Format["LabelingMethod"]) ? $Format["LabelingMethod"] : LABELING_ALL;
     $LabelSkip      = isset($Format["LabelSkip"]) ? $Format["LabelSkip"] : 0;
    $LastLabel   = isset($Format["LastLabel"]) ? $Format["LastLabel"] : FALSE;

     /* Check if we have at least both one X and Y axis */
     $GotXAxis = FALSE; $GotYAxis = FALSE;
     foreach($this->pDataObject->Data["Axis"] as $AxisID => $AxisSettings)
      {
       if ( $AxisSettings["Identity"] == AXIS_X ) { $GotXAxis = TRUE; }
       if ( $AxisSettings["Identity"] == AXIS_Y ) { $GotYAxis = TRUE; }
      }
     if ( !$GotXAxis ) { return(SCATTER_MISSING_X_SERIE); }
     if ( !$GotYAxis ) { return(SCATTER_MISSING_Y_SERIE); }

     /* Skip a NOTICE event in case of an empty array */
     if ( $DrawYLines == NONE ) { $DrawYLines = array("zarma"=>"31"); }

     $Data = $this->pDataObject->getData();

     foreach($Data["Axis"] as $AxisID => $AxisSettings)
      {
       if ( $AxisSettings["Identity"] == AXIS_X)
        { $Width = $this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1 - $XMargin*2; }
       else
        { $Width = $this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1 - $YMargin*2; }

       $AxisMin = ABSOLUTE_MAX; $AxisMax = OUT_OF_SIGHT;
       if ( $Mode == SCALE_MODE_FLOATING )
        {
         foreach($Data["Series"] as $SerieID => $SerieParameter)
          {
           if ( $SerieParameter["Axis"] == $AxisID && $Data["Series"][$SerieID]["isDrawable"] )
            {
             $AxisMax = max($AxisMax,$Data["Series"][$SerieID]["Max"]);
             $AxisMin = min($AxisMin,$Data["Series"][$SerieID]["Min"]);
            }
          }
         $AutoMargin = (($AxisMax-$AxisMin)/100)*$XReleasePercent;

         $Data["Axis"][$AxisID]["Min"] = $AxisMin-$AutoMargin; $Data["Axis"][$AxisID]["Max"] = $AxisMax+$AutoMargin;
        }
       elseif ( $Mode == SCALE_MODE_MANUAL )
        {
         if ( isset($ManualScale[$AxisID]["Min"]) && isset($ManualScale[$AxisID]["Max"]) )
          {
           $Data["Axis"][$AxisID]["Min"] = $ManualScale[$AxisID]["Min"];
           $Data["Axis"][$AxisID]["Max"] = $ManualScale[$AxisID]["Max"];
          }
         else
          { echo "Manual scale boundaries not set."; exit(); }
        }

       /* Full manual scale */
       if ( isset($ManualScale[$AxisID]["Rows"]) && isset($ManualScale[$AxisID]["RowHeight"]) ) {
        $Scale = array("Rows"=>$ManualScale[$AxisID]["Rows"],"RowHeight"=>$ManualScale[$AxisID]["RowHeight"],"XMin"=>$ManualScale[$AxisID]["Min"],"XMax"=>$ManualScale[$AxisID]["Max"]);
      }
       else
        {
         $MaxDivs = floor($Width/$MinDivHeight);
         $Scale   = $this->pChartObject->computeScale($Data["Axis"][$AxisID]["Min"],$Data["Axis"][$AxisID]["Max"],$MaxDivs,$Factors,$AxisID);
        }

       $Data["Axis"][$AxisID]["Margin"]    = $AxisSettings["Identity"] == AXIS_X ? $XMargin : $YMargin;
       $Data["Axis"][$AxisID]["ScaleMin"]  = $Scale["XMin"];
       $Data["Axis"][$AxisID]["ScaleMax"]  = $Scale["XMax"];
       $Data["Axis"][$AxisID]["Rows"]      = $Scale["Rows"];
       $Data["Axis"][$AxisID]["RowHeight"] = $Scale["RowHeight"];

       if ( isset($Scale["Format"]) ) { $Data["Axis"][$AxisID]["Format"] = $Scale["Format"]; }

       if ( !isset($Data["Axis"][$AxisID]["Display"]) ) { $Data["Axis"][$AxisID]["Display"] = NULL; }
       if ( !isset($Data["Axis"][$AxisID]["Format"]) )  { $Data["Axis"][$AxisID]["Format"] = NULL; }
       if ( !isset($Data["Axis"][$AxisID]["Unit"]) )    { $Data["Axis"][$AxisID]["Unit"] = NULL; }
      }

     /* Get the default font color */
     $FontColorRo = $this->pChartObject->FontColorR; $FontColorGo = $this->pChartObject->FontColorG; $FontColorBo = $this->pChartObject->FontColorB;

     /* Set the original boundaries */
     $AxisPos["L"] = $this->pChartObject->GraphAreaX1; $AxisPos["R"] = $this->pChartObject->GraphAreaX2; $AxisPos["T"] = $this->pChartObject->GraphAreaY1; $AxisPos["B"] = $this->pChartObject->GraphAreaY2;

     foreach($Data["Axis"] as $AxisID => $AxisSettings)
      {
       if ( isset($AxisSettings["Color"]) )
        {
         $AxisR = $AxisSettings["Color"]["R"]; $AxisG = $AxisSettings["Color"]["G"]; $AxisB = $AxisSettings["Color"]["B"];
         $TickR = $AxisSettings["Color"]["R"]; $TickG = $AxisSettings["Color"]["G"]; $TickB = $AxisSettings["Color"]["B"];
         $this->pChartObject->setFontProperties(array("R"=>$AxisSettings["Color"]["R"],"G"=>$AxisSettings["Color"]["G"],"B"=>$AxisSettings["Color"]["B"]));
        }
       else
        {
         $AxisR = $AxisRo; $AxisG = $AxisGo; $AxisB = $AxisBo;
         $TickR = $TickRo; $TickG = $TickGo; $TickB = $TickBo;
         $this->pChartObject->setFontProperties(array("R"=>$FontColorRo,"G"=>$FontColorGo,"B"=>$FontColorBo));
        }

       $LastValue = "w00t"; $ID = 1;
       if ( $AxisSettings["Identity"] == AXIS_X )
        {
         if ( $AxisSettings["Position"] == AXIS_POSITION_BOTTOM )
          {
           if ( $XLabelsRotation == 0 )               { $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $LabelOffset = 2; }
           if ( $XLabelsRotation > 0 && $XLabelsRotation < 190 )   { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $LabelOffset = 5; }
           if ( $XLabelsRotation == 180 )            { $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $LabelOffset = 5; }
           if ( $XLabelsRotation > 180 && $XLabelsRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $LabelOffset = 2; }

           if ( $Floating )
            { $FloatingOffset = $YMargin; $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1+$AxisSettings["Margin"],$AxisPos["B"],$this->pChartObject->GraphAreaX2-$AxisSettings["Margin"],$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
           else
            { $FloatingOffset = 0; $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1,$AxisPos["B"],$this->pChartObject->GraphAreaX2,$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }

           if ( $DrawArrows ) { $this->pChartObject->drawArrow($this->pChartObject->GraphAreaX2-$AxisSettings["Margin"],$AxisPos["B"],$this->pChartObject->GraphAreaX2+($ArrowSize*2),$AxisPos["B"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }

           $Width = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) - $AxisSettings["Margin"]*2;
           $Step   = $Width / $AxisSettings["Rows"]; $SubTicksSize = $Step /2; $MaxBottom = $AxisPos["B"];
           $LastX  = NULL;
           for($i=0;$i<=$AxisSettings["Rows"];$i++)
            {
             $XPos  = $this->pChartObject->GraphAreaX1 + $AxisSettings["Margin"] + $Step*$i;
             $YPos  = $AxisPos["B"];
             $Value = $this->pChartObject->scaleFormat($AxisSettings["ScaleMin"] + $AxisSettings["RowHeight"]*$i,$AxisSettings["Display"],$AxisSettings["Format"],$AxisSettings["Unit"]);

             if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
             if ( $LastX != NULL && $CycleBackground  && ( $DrawXLines == ALL || in_array($AxisID,$DrawXLines) )) {
             $this->pChartObject->drawFilledRectangle($LastX,$this->pChartObject->GraphAreaY1+$FloatingOffset,$XPos,$this->pChartObject->GraphAreaY2-$FloatingOffset,$BGColor);
         }
           
             if ( $DrawSubTicks && $i != $AxisSettings["Rows"] )
              $this->pChartObject->drawLine($XPos+$SubTicksSize,$YPos-$InnerSubTickWidth,$XPos+$SubTicksSize,$YPos+$OuterSubTickWidth,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));

            if ($ID==($AxisSettings["Rows"]+1)) {            
                  $LabelSkip=0;
               $Skipped = FALSE;
            } else {
               $ID++;
               $Skipped = TRUE;
            }
            
            if ( $this->pChartObject->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) )
            {   
             if ( $DrawXLines == ALL || (is_array($DrawXLines) and in_array($AxisID,$DrawXLines)) )
                $this->pChartObject->drawLine($XPos,$this->pChartObject->GraphAreaY1+$FloatingOffset,$XPos,$this->pChartObject->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks));
             $Bounds    = $this->pChartObject->drawText($XPos,$YPos+$OuterTickWidth+$LabelOffset,$Value,array("Angle"=>$XLabelsRotation,"Align"=>$LabelAlign));
             $TxtBottom = $YPos+$OuterTickWidth+2+($Bounds[0]["Y"]-$Bounds[2]["Y"]);
             $MaxBottom = max($MaxBottom,$TxtBottom);
             $LastValue = $Value;
             $Skipped   = FALSE;
            }
   
            if ( $Skipped)
            {
             if ( $DrawXLines ) { $this->pChartObject->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$SkippedAxisColor);
             }
             if ( $SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0 ) { $this->drawLine($XPos,$YPos-$SkippedInnerTickWidth,$XPos,$YPos+$SkippedOuterTickWidth,$SkippedTickColor); }
            }
            else
            {
             if ( $DrawXLines && ($XPos != $this->GraphAreaX1 && $XPos != $this->GraphAreaX2) ) {
                $this->pChartObject->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks));
               }
             if ( $InnerTickWidth !=0 || $OuterTickWidth != 0 ) { $this->pChartObject->drawLine($XPos,$YPos-$InnerTickWidth,$XPos,$YPos+$OuterTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
            }
            
             $LastX = $XPos;
            }

           if ( isset($AxisSettings["Name"]) )
            {
             $YPos   = $MaxBottom+2;
             $XPos   = $this->pChartObject->GraphAreaX1+($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1)/2;
             $Bounds = $this->pChartObject->drawText($XPos,$YPos,$AxisSettings["Name"],array("Align"=>TEXT_ALIGN_TOPMIDDLE));
             $MaxBottom = $Bounds[0]["Y"];

             $this->pDataObject->Data["GraphArea"]["Y2"] = $MaxBottom + $this->pChartObject->FontSize;
            }

           $AxisPos["B"] = $MaxBottom + $ScaleSpacing;
          }
         elseif ( $AxisSettings["Position"] == AXIS_POSITION_TOP )
          {
           if ( $XLabelsRotation == 0 )               { $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $LabelOffset = 2; }
           if ( $XLabelsRotation > 0 && $XLabelsRotation < 190 )   { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $LabelOffset = 2; }
           if ( $XLabelsRotation == 180 )            { $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $LabelOffset = 5; }
           if ( $XLabelsRotation > 180 && $SLabelxRotation < 360 )   { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $LabelOffset = 5; }

           if ( $Floating )
            { $FloatingOffset = $YMargin; $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1+$AxisSettings["Margin"],$AxisPos["T"],$this->pChartObject->GraphAreaX2-$AxisSettings["Margin"],$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
           else
            { $FloatingOffset = 0; $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1,$AxisPos["T"],$this->pChartObject->GraphAreaX2,$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }

           if ( $DrawArrows ) { $this->pChartObject->drawArrow($this->pChartObject->GraphAreaX2-$AxisSettings["Margin"],$AxisPos["T"],$this->pChartObject->GraphAreaX2+($ArrowSize*2),$AxisPos["T"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }

           $Width = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) - $AxisSettings["Margin"]*2;
           $Step   = $Width / $AxisSettings["Rows"]; $SubTicksSize = $Step /2; $MinTop = $AxisPos["T"];
           $LastX  = NULL;
           for($i=0;$i<=$AxisSettings["Rows"];$i++)
            {
             $XPos  = $this->pChartObject->GraphAreaX1 + $AxisSettings["Margin"] + $Step*$i;
             $YPos  = $AxisPos["T"];
             $Value = $this->pChartObject->scaleFormat($AxisSettings["ScaleMin"] + $AxisSettings["RowHeight"]*$i,$AxisSettings["Display"],$AxisSettings["Format"],$AxisSettings["Unit"]);

             if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
             if ( $LastX != NULL && $CycleBackground  && ( $DrawXLines == ALL || in_array($AxisID,$DrawXLines) )) { $this->pChartObject->drawFilledRectangle($LastX,$this->pChartObject->GraphAreaY1+$FloatingOffset,$XPos,$this->pChartObject->GraphAreaY2-$FloatingOffset,$BGColor); }
           
             if ( $DrawSubTicks && $i != $AxisSettings["Rows"] )             
             $this->pChartObject->drawLine($XPos+$SubTicksSize,$YPos-$OuterSubTickWidth,$XPos+$SubTicksSize,$YPos+$InnerSubTickWidth,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));      
         
            if ($ID==($AxisSettings["Rows"]+1)) {            
                  $LabelSkip=0;
               $Skipped = FALSE;
            } else {
               $ID++;
               $Skipped = TRUE;
            }

               if ( $this->pChartObject->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) )
                {
             if ( $DrawXLines == ALL || (is_array($DrawXLines) and in_array($AxisID,$DrawXLines)) )
                $this->pChartObject->drawLine($XPos,$this->pChartObject->GraphAreaY1+$FloatingOffset,$XPos,$this->pChartObject->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks));
               
                 $Bounds = $this->pChartObject->drawText($XPos,$YPos-$OuterTickWidth-$YLabelOffset,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign));
                 $TxtBox = $YPos-$OuterTickWidth-2-($Bounds[0]["Y"]-$Bounds[2]["Y"]);
                 $MinTop = min($MinTop,$TxtBox);
                 $LastValue = $Value;
                 $Skipped   = FALSE;
                }

               if ( $Skipped )
                {
                 if ( $DrawXLines ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$SkippedAxisColor); }
                 if ( $SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0 ) { $this->pChartObject->drawLine($XPos,$YPos+$SkippedInnerTickWidth,$XPos,$YPos-$SkippedOuterTickWidth,$SkippedTickColor); }
                }
               else
                {
                 if ( $DrawXLines ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
                 if ( $InnerTickWidth !=0 || $OuterTickWidth != 0 ) { $this->drawLine($XPos,$YPos+$InnerTickWidth,$XPos,$YPos-$OuterTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
                }         
            
             $LastX = $XPos;
            }

           if ( isset($AxisSettings["Name"]) )
            {
             $YPos   = $MinTop-2;
             $XPos   = $this->pChartObject->GraphAreaX1+($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1)/2;
             $Bounds = $this->pChartObject->drawText($XPos,$YPos,$AxisSettings["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
             $MinTop = $Bounds[2]["Y"];

             $this->pDataObject->Data["GraphArea"]["Y1"] = $MinTop;
            }

           $AxisPos["T"] = $MinTop - $ScaleSpacing;
          }
        }
       elseif ( $AxisSettings["Identity"] == AXIS_Y )
        {
         if ( $AxisSettings["Position"] == AXIS_POSITION_LEFT )
          {

           if ( $Floating )
            { $FloatingOffset = $XMargin; $this->pChartObject->drawLine($AxisPos["L"],$this->pChartObject->GraphAreaY1+$AxisSettings["Margin"],$AxisPos["L"],$this->pChartObject->GraphAreaY2-$AxisSettings["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha));
         }
           else
            { $FloatingOffset = 0; $this->pChartObject->drawLine($AxisPos["L"],$this->pChartObject->GraphAreaY1,$AxisPos["L"],$this->pChartObject->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha));
         }

           if ( $DrawArrows ) { $this->pChartObject->drawArrow($AxisPos["L"],$this->pChartObject->GraphAreaY1+$AxisSettings["Margin"],$AxisPos["L"],$this->pChartObject->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }

           $Height = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) - $AxisSettings["Margin"]*2;
           $Step   = $Height / $AxisSettings["Rows"]; $SubTicksSize = $Step /2; $MinLeft = $AxisPos["L"];
           $LastY  = NULL;
           for($i=0;$i<=$AxisSettings["Rows"];$i++)
            {
             $YPos  = $this->pChartObject->GraphAreaY2 - $AxisSettings["Margin"] - $Step*$i;
             $XPos  = $AxisPos["L"];
             $Value = $this->pChartObject->scaleFormat($AxisSettings["ScaleMin"] + $AxisSettings["RowHeight"]*$i,$AxisSettings["Display"],$AxisSettings["Format"],$AxisSettings["Unit"]);

             if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
             if ( $LastY != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) {
             $this->pChartObject->drawFilledRectangle($this->pChartObject->GraphAreaX1+$FloatingOffset,$LastY,$this->pChartObject->GraphAreaX2-$FloatingOffset,$YPos,$BGColor);
          }

             if ( ($YPos != $this->pChartObject->GraphAreaY1 && $YPos != $this->pChartObject->GraphAreaY2) && ($DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) {
               $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1+$FloatingOffset,$YPos,$this->pChartObject->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks));
             }

             if ( $DrawSubTicks && $i != $AxisSettings["Rows"] )
              $this->pChartObject->drawLine($XPos-$OuterSubTickWidth,$YPos-$SubTicksSize,$XPos+$InnerSubTickWidth,$YPos-$SubTicksSize,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));

             $this->pChartObject->drawLine($XPos-$OuterTickWidth,$YPos,$XPos+$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
             $Bounds  = $this->pChartObject->drawText($XPos-$OuterTickWidth-2,$YPos,$Value,array("Align"=>TEXT_ALIGN_MIDDLERIGHT));
             $TxtLeft = $XPos-$OuterTickWidth-2-($Bounds[1]["X"]-$Bounds[0]["X"]);
             $MinLeft = min($MinLeft,$TxtLeft);

             $LastY = $YPos;
            }

           if ( isset($AxisSettings["Name"]) )
            {
             $XPos    = $MinLeft-2;
             $YPos    = $this->pChartObject->GraphAreaY1+($this->pChartObject->GraphAreaY2-$this->pChartObject->GraphAreaY1)/2;
             $Bounds  = $this->pChartObject->drawText($XPos,$YPos,$AxisSettings["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>90));
             $MinLeft = $Bounds[2]["X"];

             $this->pDataObject->Data["GraphArea"]["X1"] = $MinLeft;
            }

           $AxisPos["L"] = $MinLeft - $ScaleSpacing;
          }
         elseif ( $AxisSettings["Position"] == AXIS_POSITION_RIGHT )
          {

           if ( $Floating )
            { $FloatingOffset = $XMargin; $this->pChartObject->drawLine($AxisPos["R"],$this->pChartObject->GraphAreaY1+$AxisSettings["Margin"],$AxisPos["R"],$this->pChartObject->GraphAreaY2-$AxisSettings["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
           else
            { $FloatingOffset = 0; $this->pChartObject->drawLine($AxisPos["R"],$this->pChartObject->GraphAreaY1,$AxisPos["R"],$this->pChartObject->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }

           if ( $DrawArrows ) { $this->pChartObject->drawArrow($AxisPos["R"],$this->pChartObject->GraphAreaY1+$AxisSettings["Margin"],$AxisPos["R"],$this->pChartObject->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }

           $Height = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) - $AxisSettings["Margin"]*2;
           $Step   = $Height / $AxisSettings["Rows"]; $SubTicksSize = $Step /2; $MaxLeft = $AxisPos["R"];
           $LastY  = NULL;
           for($i=0;$i<=$AxisSettings["Rows"];$i++)
            {
             $YPos  = $this->pChartObject->GraphAreaY2 - $AxisSettings["Margin"] - $Step*$i;
             $XPos  = $AxisPos["R"];
             $Value = $this->pChartObject->scaleFormat($AxisSettings["ScaleMin"] + $AxisSettings["RowHeight"]*$i,$AxisSettings["Display"],$AxisSettings["Format"],$AxisSettings["Unit"]);

             if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
             if ( $LastY != NULL && $CycleBackground  && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->pChartObject->drawFilledRectangle($this->pChartObject->GraphAreaX1+$FloatingOffset,$LastY,$this->pChartObject->GraphAreaX2-$FloatingOffset,$YPos,$BGColor); }

             if ( ($YPos != $this->pChartObject->GraphAreaY1 && $YPos != $this->pChartObject->GraphAreaY2) && ($DrawYLines == ALL || in_array($AxisID,$DrawYLines)) ) { $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1+$FloatingOffset,$YPos,$this->pChartObject->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }

             if ( $DrawSubTicks && $i != $AxisSettings["Rows"] )
              $this->pChartObject->drawLine($XPos-$InnerSubTickWidth,$YPos-$SubTicksSize,$XPos+$OuterSubTickWidth,$YPos-$SubTicksSize,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));

             $this->pChartObject->drawLine($XPos-$InnerTickWidth,$YPos,$XPos+$OuterTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
             $Bounds  = $this->pChartObject->drawText($XPos+$OuterTickWidth+2,$YPos,$Value,array("Align"=>TEXT_ALIGN_MIDDLELEFT));
             $TxtLeft = $XPos+$OuterTickWidth+2+($Bounds[1]["X"]-$Bounds[0]["X"]);
             $MaxLeft = max($MaxLeft,$TxtLeft);

             $LastY = $YPos;
            }

           if ( isset($AxisSettings["Name"]) )
            {
             $XPos    = $MaxLeft+6;
             $YPos    = $this->pChartObject->GraphAreaY1+($this->pChartObject->GraphAreaY2-$this->pChartObject->GraphAreaY1)/2;
             $Bounds  = $this->pChartObject->drawText($XPos,$YPos,$AxisSettings["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>270));
             $MaxLeft = $Bounds[2]["X"];

             $this->pDataObject->Data["GraphArea"]["X2"] = $MaxLeft + $this->pChartObject->FontSize;
            }

           $AxisPos["R"] = $MaxLeft + $ScaleSpacing;
          }
        }
      }

     $this->pDataObject->saveAxisConfig($Data["Axis"]);
    }


Example:
Attachment:
File comment: Example
grafikon 1_2.jpg
grafikon 1_2.jpg [ 49.05 KiB | Viewed 9002 times ]


Thu Oct 27, 2011 1:33 pm
Profile
Regular pChart user
Regular pChart user

Joined: Fri Apr 20, 2012 10:15 am
Posts: 9
Post Re: drawScatterScal function LabelSkip,LastLabel,LabelingMet
Hi,

i really like your function, and i think it's the solution to the troubles i am having.

My situation is the following:

I'm collecting data from a meteo station and storing it in a database.

I have to manage two different kind of datas, DateTime and Temperature.

Temperature and Datetime are 2 arrays of the same length, but with the problem that dateTime can be discountinuous and scattered in time.

Temperature[i] is the temperature measured at the instant of DateTime[i].

My goal is to plot temperature as function of dateTime. (linear fit)

I'll post an example of my trouble:

Code:
<?php

include("../../pChart/class/pDraw.class.php");
include("../../pChart/class/pImage.class.php");
include("../../pChart/class/pData.class.php");

$myData = new pData();

$dateTime = array("08:00","09:00","12:00","13:00");

$myData->addPoints( $dateTime,"Labels");

$myData->setSerieDescription("Labels","Ore");

$myData->setAbscissa("Labels");

$temperature=array("12","13","14","30");

$myData->addPoints($temperature);

$myPicture = new pImage(1100,230,$myData);

$myPicture->setFontProperties(array("FontName"=>"../../pChart/fonts/Forgotte.ttf","FontSize"=>10));

  $myPicture->drawText(10,20,"Temperatura 24h");

$myPicture->setGraphArea(60,40,1100,190);

$myPicture->drawScale();

$myPicture->drawLineChart();

$myPicture->Stroke();
?>


The graph generated is:
Image

If you take a look at the X axys the distance between 09:00 and 12:00 is the same as the distance between 08:00 and 09:00.

I would like to avoid this and plot temperature[i] at the X value = datetime[i].

Regards,

Cristian


Fri Apr 20, 2012 11:08 am
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 2 posts ] 

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron