Inheritance: extends Axis
 /**
  * Returns the X and Y axis class instances as a list
  */
 protected function GetAxes($ends, &$x_len, &$y_len)
 {
     // always assoc, no units
     $this->units_x = $this->units_before_x = null;
     // if fixed grid spacing is specified, make the min spacing 1 pixel
     if (is_numeric($this->grid_division_v)) {
         $this->minimum_grid_spacing_v = 1;
     }
     if (is_numeric($this->grid_division_h)) {
         $this->minimum_grid_spacing_h = 1;
     }
     $max_h = $ends['v_max'][0];
     $min_h = $ends['v_min'][0];
     $max_v = $ends['k_max'][0];
     $min_v = $ends['k_min'][0];
     $x_min_unit = $this->ArrayOption($this->minimum_units_y, 0);
     $x_fit = false;
     $y_min_unit = 1;
     $y_fit = true;
     $x_units_after = (string) $this->ArrayOption($this->units_y, 0);
     $y_units_after = (string) $this->ArrayOption($this->units_x, 0);
     $x_units_before = (string) $this->ArrayOption($this->units_before_y, 0);
     $y_units_before = (string) $this->ArrayOption($this->units_before_x, 0);
     $x_decimal_digits = $this->GetFirst($this->ArrayOption($this->decimal_digits_y, 0), $this->decimal_digits);
     $y_decimal_digits = $this->GetFirst($this->ArrayOption($this->decimal_digits_x, 0), $this->decimal_digits);
     $x_text_callback = $this->GetFirst($this->ArrayOption($this->axis_text_callback_x, 0), $this->axis_text_callback);
     $y_text_callback = $this->GetFirst($this->ArrayOption($this->axis_text_callback_y, 0), $this->axis_text_callback);
     $this->grid_division_h = $this->ArrayOption($this->grid_division_h, 0);
     $this->grid_division_v = $this->ArrayOption($this->grid_division_v, 0);
     // sanitise grid divisions
     if (is_numeric($this->grid_division_v) && $this->grid_division_v <= 0) {
         $this->grid_division_v = null;
     }
     if (is_numeric($this->grid_division_h) && $this->grid_division_h <= 0) {
         $this->grid_division_h = null;
     }
     if (!is_numeric($max_h) || !is_numeric($min_h) || !is_numeric($max_v) || !is_numeric($min_v)) {
         throw new Exception('Non-numeric min/max');
     }
     if (!is_numeric($this->grid_division_h)) {
         $x_axis = new AxisDoubleEnded($x_len, $max_h, $min_h, $x_min_unit, $x_fit, $x_units_before, $x_units_after, $x_decimal_digits, $x_text_callback);
     } else {
         $x_axis = new AxisFixedDoubleEnded($x_len, $max_h, $min_h, $this->grid_division_h, $x_units_before, $x_units_after, $x_decimal_digits, $x_text_callback);
     }
     if (!is_numeric($this->grid_division_v)) {
         $y_axis = new Axis($y_len, $max_v, $min_v, $y_min_unit, $y_fit, $y_units_before, $y_units_after, $y_decimal_digits, $y_text_callback);
     } else {
         $y_axis = new AxisFixed($y_len, $max_v, $min_v, $this->grid_division_v, $y_units_before, $y_units_after, $y_decimal_digits, $y_text_callback);
     }
     $y_axis->Reverse();
     // because axis starts at bottom
     return array(array($x_axis), array($y_axis));
 }
 /**
  * Returns the X and Y axis class instances as a list
  */
 protected function GetAxes($ends, &$x_len, &$y_len)
 {
     // disable units for associative keys
     if ($this->values->AssociativeKeys()) {
         $this->units_x = $this->units_before_x = null;
     }
     // make sure minimum_grid_spacing options are arrays
     $mgsv = $this->minimum_grid_spacing_v;
     if (!is_array($mgsv)) {
         $this->minimum_grid_spacing_v = array();
     }
     $x_axes = array();
     $x_axis_count = $this->XAxisCount();
     for ($i = 0; $i < $x_axis_count; ++$i) {
         $grid_division = $this->ArrayOption($this->grid_division_h, $i);
         if (is_numeric($grid_division)) {
             if ($grid_division <= 0) {
                 throw new Exception('Invalid grid division');
             }
             // if fixed grid spacing is specified, make the min spacing 1 pixel
             $this->minimum_grid_spacing_h = 1;
         }
         if ($this->flip_axes) {
             $max_h = $ends['v_max'][$i];
             $min_h = $ends['v_min'][$i];
             $x_min_unit = $this->ArrayOption($this->minimum_units_y, $i);
             $x_fit = false;
             $x_units_after = (string) $this->ArrayOption($this->units_y, $i);
             $x_units_before = (string) $this->ArrayOption($this->units_before_y, $i);
             $x_decimal_digits = $this->GetFirst($this->ArrayOption($this->decimal_digits_y, $i), $this->decimal_digits);
             $x_text_callback = $this->GetFirst($this->ArrayOption($this->axis_text_callback_y, $i), $this->axis_text_callback);
         } else {
             $max_h = $ends['k_max'][$i];
             $min_h = $ends['k_min'][$i];
             $x_min_unit = 1;
             $x_fit = true;
             $x_units_after = (string) $this->ArrayOption($this->units_x, $i);
             $x_units_before = (string) $this->ArrayOption($this->units_before_x, $i);
             $x_decimal_digits = $this->GetFirst($this->ArrayOption($this->decimal_digits_x, $i), $this->decimal_digits);
             $x_text_callback = $this->GetFirst($this->ArrayOption($this->axis_text_callback_x, $i), $this->axis_text_callback);
         }
         if (!is_numeric($max_h) || !is_numeric($min_h)) {
             throw new Exception('Non-numeric min/max');
         }
         if ($this->ArrayOption($this->log_axis_y, $i) && $this->flip_axes) {
             $x_axis = new AxisLog($x_len, $max_h, $min_h, $x_min_unit, $x_fit, $x_units_before, $x_units_after, $x_decimal_digits, $this->ArrayOption($this->log_axis_y_base, $i), $grid_division);
         } elseif (!is_numeric($grid_division)) {
             $x_axis = new Axis($x_len, $max_h, $min_h, $x_min_unit, $x_fit, $x_units_before, $x_units_after, $x_decimal_digits, $x_text_callback);
         } else {
             $x_axis = new AxisFixed($x_len, $max_h, $min_h, $grid_division, $x_units_before, $x_units_after, $x_decimal_digits, $x_text_callback);
         }
         $x_axes[] = $x_axis;
     }
     $y_axes = array();
     $y_axis_count = $this->YAxisCount();
     for ($i = 0; $i < $y_axis_count; ++$i) {
         $grid_division = $this->ArrayOption($this->grid_division_v, $i);
         if (is_numeric($grid_division)) {
             if ($grid_division <= 0) {
                 throw new Exception('Invalid grid division');
             }
             // if fixed grid spacing is specified, make the min spacing 1 pixel
             $this->minimum_grid_spacing_v[$i] = 1;
         } elseif (!isset($this->minimum_grid_spacing_v[$i])) {
             $this->minimum_grid_spacing_v[$i] = $mgsv;
         }
         if ($this->flip_axes) {
             $max_v = $ends['k_max'][$i];
             $min_v = $ends['k_min'][$i];
             $y_min_unit = 1;
             $y_fit = true;
             $y_units_after = (string) $this->ArrayOption($this->units_x, $i);
             $y_units_before = (string) $this->ArrayOption($this->units_before_x, $i);
             $y_decimal_digits = $this->GetFirst($this->ArrayOption($this->decimal_digits_x, $i), $this->decimal_digits);
             $y_text_callback = $this->GetFirst($this->ArrayOption($this->axis_text_callback_x, $i), $this->axis_text_callback);
         } else {
             $max_v = $ends['v_max'][$i];
             $min_v = $ends['v_min'][$i];
             $y_min_unit = $this->ArrayOption($this->minimum_units_y, $i);
             $y_fit = false;
             $y_units_after = (string) $this->ArrayOption($this->units_y, $i);
             $y_units_before = (string) $this->ArrayOption($this->units_before_y, $i);
             $y_decimal_digits = $this->GetFirst($this->ArrayOption($this->decimal_digits_y, $i), $this->decimal_digits);
             $y_text_callback = $this->GetFirst($this->ArrayOption($this->axis_text_callback_y, $i), $this->axis_text_callback);
         }
         if (!is_numeric($max_v) || !is_numeric($min_v)) {
             throw new Exception('Non-numeric min/max');
         }
         if ($this->ArrayOption($this->log_axis_y, $i) && !$this->flip_axes) {
             $y_axis = new AxisLog($y_len, $max_v, $min_v, $y_min_unit, $y_fit, $y_units_before, $y_units_after, $y_decimal_digits, $this->ArrayOption($this->log_axis_y_base, $i), $grid_division);
         } elseif (!is_numeric($grid_division)) {
             $y_axis = new Axis($y_len, $max_v, $min_v, $y_min_unit, $y_fit, $y_units_before, $y_units_after, $y_decimal_digits, $y_text_callback);
         } else {
             $y_axis = new AxisFixed($y_len, $max_v, $min_v, $grid_division, $y_units_before, $y_units_after, $y_decimal_digits, $y_text_callback);
         }
         $y_axis->Reverse();
         // because axis starts at bottom
         $y_axes[] = $y_axis;
     }
     // set the main axis correctly
     if ($this->axis_right && count($y_axes) == 1) {
         $this->main_y_axis = 1;
         array_unshift($y_axes, NULL);
     }
     return array($x_axes, $y_axes);
 }