Rev 60 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/** This work is hereby released into the Public Domain.* To view a copy of the public domain dedication,* visit http://creativecommons.org/licenses/publicdomain/ or send a letter to* Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.**/require_once dirname(__FILE__)."/Plot.class.php";/*** ScatterPlot** @package Artichow*/class awScatterPlot extends awPlot implements awLegendable {/*** Add marks to the scatter plot** @var Mark*/public $mark;/*** Labels on the plot** @var Label*/public $label;/*** Link points ?** @var bool*/protected $link = FALSE;/*** Display impulses** @var bool*/protected $impulse = NULL;/*** Link NULL points ?** @var bool*/protected $linkNull = FALSE;/*** Line color** @var Color*/protected $lineColor;/*** Line type** @var int*/protected $lineStyle = awLine::SOLID;/*** Line thickness** @var int*/protected $lineThickness = 1;/*** Construct a new awScatterPlot** @param array $datay Numeric values for Y axis* @param array $datax Numeric values for X axis* @param int $mode*/public function __construct($datay, $datax = NULL) {parent::__construct();// Defaults marks$this->mark = new awMark;$this->mark->setType(awMark::CIRCLE);$this->mark->setSize(7);$this->mark->border->show();$this->label = new awLabel;$this->setValues($datay, $datax);$this->setColor(new awBlack);}/*** Display plot as impulses** @param awColor $impulse Impulses color (or NULL to disable impulses)*/public function setImpulse($color) {$this->impulse = $color;}/*** Link scatter plot points** @param bool $link* @param awColor $color Line color (default to black)*/public function link($link, $color = NULL) {$this->link = (bool)$link;if($color instanceof awColor) {$this->setColor($color);}}/*** Ignore null values for Y data and continue linking** @param bool $link*/public function linkNull($link) {$this->linkNull = (bool)$link;}/*** Change line color** @param awColor $color*/public function setColor(awColor $color) {$this->lineColor = $color;}/*** Change line style** @param int $style*/public function setStyle($style) {$this->lineStyle = (int)$style;}/*** Change line tickness** @param int $tickness*/public function setThickness($tickness) {$this->lineThickness = (int)$tickness;}/*** Get the line thickness** @return int*/public function getLegendLineThickness() {return $this->lineThickness;}/*** Get the line type** @return int*/public function getLegendLineStyle() {return $this->lineStyle;}/*** Get the color of line** @return Color*/public function getLegendLineColor() {return $this->lineColor;}/*** Get the background color or gradient of an element of the component** @return Color, Gradient*/public function getLegendBackground() {return NULL;}/*** Get a mark object** @return Mark*/public function getLegendMark() {return $this->mark;}public function drawComponent(awDriver $driver, $x1, $y1, $x2, $y2, $aliasing) {$count = count($this->datay);// Get start and stop valueslist($start, $stop) = $this->getLimit();// Build the polygon$polygon = new awPolygon;for($key = 0; $key < $count; $key++) {$x = $this->datax[$key];$y = $this->datay[$key];if($y !== NULL) {$p = awAxis::toPosition($this->xAxis, $this->yAxis, new awPoint($x, $y));$polygon->set($key, $p);} else if($this->linkNull === FALSE) {$polygon->set($key, NULL);}}// Link points if neededif($this->link) {$prev = NULL;foreach($polygon->all() as $point) {if($prev !== NULL and $point !== NULL) {$driver->line($this->lineColor,new awLine($prev,$point,$this->lineStyle,$this->lineThickness));}$prev = $point;}}// Draw impulsesif($this->impulse instanceof awColor) {foreach($polygon->all() as $key => $point) {if($point !== NULL) {$zero = awAxis::toPosition($this->xAxis,$this->yAxis,new awPoint($key, 0));$driver->line($this->impulse,new awLine($zero,$point,awLine::SOLID,1));}}}// Draw marks and labelsforeach($polygon->all() as $key => $point) {$this->mark->draw($driver, $point);$this->label->draw($driver, $point, $key);}}protected function xAxisPoint($position) {$y = $this->xAxisZero ? 0 : $this->getRealYMin();return awAxis::toPosition($this->xAxis, $this->yAxis, new awPoint($position, $y));}public function getXCenter() {return FALSE;}}registerClass('ScatterPlot');?>