⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 phplot.php

📁 每个RFC 3261信息头有一个相应的存取标识. 但是,许多信息头拥有同样的形式。 例如。To和From的信息头都是由显示名和一个URI组成。 To和From信息头用来管理与处理NameAddr实例的
💻 PHP
📖 第 1 页 / 共 5 页
字号:
		reset($this->data_values);		while (list($dat_key, $dat) = each($this->data_values)) {  //for each X barchart setting		//foreach($this->data_values as $dat)  //can use foreach only in php4			$tmp = 0;			$total_records += count($dat) - 1; // -1 for label			switch ($this->data_type) {				case "text-data":					//Find the relative Max and Min					while (list($key, $val) = each($dat)) {						if ($key != 0) {  //$dat[0] = label							SetType($val,"double");							if ($val > $maxy) {								$maxy = $val ;							}							if ($val < $miny) {								$miny = (double) $val ;							}						}						$tmp++;					}				break;				case "data-data":  //X-Y data is passed in as $data[] = (title,x,y,y2,y3,...) which you can use for multi-dimentional plots.					while (list($key, $val) = each($dat)) {						if ($key == 1) {  //$dat[0] = label							SetType($val,"double");							if ($val > $maxx) {								$maxx = $val;							} elseif ($val < $minx) {								$minx = $val;							}						} elseif ($key > 1) {							SetType($val,"double");							if ($val > $maxy) {								$maxy = $val ;							} elseif ($val < $miny) {								$miny = $val ;							}						}						$tmp++;					}					$tmp = $tmp - 1; //# records per group				break;				case "data-data-error":  //Assume 2-D for now, can go higher				//Regular X-Y data is passed in as $data[] = (title,x,y,error+,error-,y2,error2+,error2-)					while (list($key, $val) = each($dat)) {						if ($key == 1) {  //$dat[0] = label							SetType($val,'double');							if ($val > $maxx) {								$maxx = $val;							} elseif ($val < $minx) {								$minx = $val;							}						} elseif ($key%3 == 2) {							SetType($val,'double');							if ($val > $maxy) {								$maxy = $val ;							} elseif ($val < $miny) {								$miny = $val ;							}						} elseif ($key%3 == 0) {							SetType($val,'double');							if ($val > $maxe) {								$maxe = $val ;							}						} elseif ($key%3 == 1) {							SetType($val,'double');							if ($val > $mine) {								$mine = $val ;							}						}						$tmp++;					}					$maxy = $maxy + $maxe;					$miny = $miny - $mine; //assume error bars are always > 0				break;				default:					$this->PrintError('ERROR: unknown chart type');				break;			}			if ($tmp > $max_records_per_group) {				$max_records_per_group = $tmp;			}		}		$this->min_x = $minx;		$this->max_x = $maxx;		$this->min_y = $miny;		$this->max_y = $maxy;		if ($max_records_per_group > 1) {			$this->records_per_group = $max_records_per_group - 1;		} else {			$this->records_per_group = 1;		}		//$this->data_count = $total_records ;	} // function FindDataLimits	function SetMargins() {		/////////////////////////////////////////////////////////////////		// When the image is first created - set the margins		// to be the standard viewport.		// The standard viewport is the full area of the view surface (or panel),		// less a margin of 4 character heights all round for labelling.		// It thus depends on the current character size, set by SetCharacterHeight().		/////////////////////////////////////////////////////////////////		$str = split("\n",$this->title_txt); 		$nbLines = count($str); 		if ($this->use_ttf == 1) {			$title_size = $this->TTFBBoxSize($this->title_ttffont_size, $this->title_angle, $this->title_ttffont, 'X'); //An array			if ($nbLines == 1) { 				$this->y_top_margin = $title_size[1] * 4;			} else { 				$this->y_top_margin = $title_size[1] * ($nbLines+3);			}			//ajo working here			//$x_label_size = $this->TTFBBoxSize($this->x_label_ttffont_size, 0, $this->axis_ttffont, $this->x_label_txt);			$this->y_bot_margin = $this->x_label_height ;			$this->x_left_margin = $this->y_label_width * 2 + $this->tick_length;			$this->x_right_margin = 33.0; // distance between right and end of x axis in pixels 		} else {			$title_size = array(ImageFontWidth($this->title_font) * strlen($this->title_txt),ImageFontHeight($this->title_font));			//$this->y_top_margin = ($title_size[1] * 4);			if ($nbLines == 1) { 				$this->y_top_margin = $title_size[1] * 4;			} else { 				$this->y_top_margin = $title_size[1] * ($nbLines+3);			}			if ($this->x_datalabel_angle == 90) {				$this->y_bot_margin = 76.0; // Must be integer			} else {				$this->y_bot_margin = 66.0; // Must be integer			}			$this->x_left_margin = 77.0; // distance between left and start of x axis in pixels			$this->x_right_margin = 33.0; // distance between right and end of x axis in pixels		}//exit;		$this->x_tot_margin = $this->x_left_margin + $this->x_right_margin;		$this->y_tot_margin = $this->y_top_margin + $this->y_bot_margin;		if ($this->plot_max_x && $this->plot_max_y && $this->plot_area_width ) { //If data has already been analysed then set translation			$this->SetTranslation();		}	}	function SetMarginsPixels($which_lm,$which_rm,$which_tm,$which_bm) { 		//Set the plot area using margins in pixels (left, right, top, bottom)		$this->SetNewPlotAreaPixels($which_lm,$which_tm,($this->image_width - $which_rm),($this->image_height - $which_bm));		return true;	}	function SetNewPlotAreaPixels($x1,$y1,$x2,$y2) {		//Like in GD 0,0 is upper left set via pixel Coordinates		$this->plot_area = array($x1,$y1,$x2,$y2);		$this->plot_area_width = $this->plot_area[2] - $this->plot_area[0];		$this->plot_area_height = $this->plot_area[3] - $this->plot_area[1];		$this->y_top_margin = $this->plot_area[1];		if ($this->plot_max_x) {			$this->SetTranslation();		}		return true;	}	function SetPlotAreaPixels($x1,$y1,$x2,$y2) {		//Like in GD 0,0 is upper left		if (!$this->x_tot_margin) {			$this->SetMargins();		}		if ($x2 && $y2) {			$this->plot_area = array($x1,$y1,$x2,$y2);		} else {			$this->plot_area = array($this->x_left_margin, $this->y_top_margin,								$this->image_width - $this->x_right_margin,								$this->image_height - $this->y_bot_margin							);		}		$this->plot_area_width = $this->plot_area[2] - $this->plot_area[0];		$this->plot_area_height = $this->plot_area[3] - $this->plot_area[1];		return true;	}	function SetPlotAreaWorld($xmin,$ymin,$xmax,$ymax) {		if (($xmin == "")  && ($xmax == "")) {			//For automatic setting of data we need $this->max_x				if (!$this->max_y) {					$this->FindDataLimits() ;				}				if ($this->data_type == 'text-data') { //labels for text-data is done at data drawing time for speed.					$xmax = $this->max_x + 1 ;  //valid for BAR CHART TYPE GRAPHS ONLY					$xmin = 0 ; 				//valid for BAR CHART TYPE GRAPHS ONLY				} else {					$xmax = $this->max_x * 1.02;					$xmin = $this->min_x;				}				$ymax = ceil($this->max_y * 1.2);				if ($this->min_y < 0) {					$ymin = floor($this->min_y * 1.2);				} else {					$ymin = 0;				}		}		$this->plot_min_x = $xmin;		$this->plot_max_x = $xmax;		if ($ymin == $ymax) {			$ymax += 1;		}		if ($this->yscale_type == "log") { 			//extra error checking			if ($ymin <= 0) { 				$ymin = 1;			} 			if ($ymax <= 0) { 				$this->PrintError('Log plots need data greater than 0');			}		}		$this->plot_min_y = $ymin;		$this->plot_max_y = $ymax;		if ($ymax <= $ymin) {			$this->DrawError('Error in Data - max not gt min');		}//Set the boundaries of the box for plotting in world coord//		if (!$this->x_tot_margin) { //We need to know the margins before we can calculate scale//			$this->SetMargins();//		}		//For this we have to reset the scale		if ($this->plot_area_width) {			$this->SetTranslation();		}		return true;	} //function SetPlotAreaWorld	function PrintError($error_message) {	// prints the error message to stdout and die		echo "<p><b>Fatal error</b>: $error_message<p>";		die;	}	function DrawError($error_message) {	// prints the error message inline into	// the generated image		if (($this->img) == "") { $this->InitImage(); } ;		$ypos = $this->image_height/2;		if ($this->use_ttf == 1) {			ImageRectangle($this->img, 0,0,$this->image_width,$this->image_height,ImageColorAllocate($this->img,255,255,255));			ImageTTFText($this->img, $this->small_ttffont_size, 0, $xpos, $ypos, ImageColorAllocate($this->img,0,0,0), $this->axis_ttffont, $error_message);		} else {			ImageRectangle($this->img, 0,0,$this->image_width,$this->image_height,ImageColorAllocate($this->img,255,255,255));			ImageString($this->img, $this->small_font,1,$ypos,$error_message, ImageColorAllocate($this->img,0,0,0));		}		$this->PrintImage();		return true;	}	function TTFBBoxSize($size, $angle, $font, $string) {		//Assume angle < 90		$arr = ImageTTFBBox($size, 0, $font, $string);		$flat_width  = $arr[0] - $arr[2];		$flat_height = abs($arr[3] - $arr[5]);			// for 90deg:			//	$height = $arr[5] - $arr[7];			//	$width = $arr[2] - $arr[4];		$angle = deg2rad($angle);		$width  = ceil(abs($flat_width*cos($angle) + $flat_height*sin($angle))); //Must be integer		$height = ceil(abs($flat_width*sin($angle) + $flat_height*cos($angle))); //Must be integer		return array($width, $height);	}	function SetXLabelHeight() {		if ($this->use_ttf == 1) {			//Space for the X Label			$size = $this->TTFBBoxSize($this->x_label_ttffont_size, 0, $this->axis_ttffont, $this->x_label_txt);			$tmp = $size[1];			//$string = Str_Repeat('w', $this->x_datalabel_maxlength);			$i = 0;			$string = '';			while ($i < $this->x_datalabel_maxlength) {			  $string .= 'w';			  $i++;			}			//Space for the axis data labels			$size = $this->TTFBBoxSize($this->axis_ttffont_size, $this->x_datalabel_angle, $this->axis_ttffont, $string);			$this->x_label_height = 2*$tmp + $size[1] + 4;		} else {			//For Non-TTF fonts we can have only angles 0 or 90			if ($this->x_datalabel_angle == 90) {				$this->x_label_height = $this->x_datalabel_maxlength * ImageFontWidth($this->small_font) / 1.5;			} else {				$this->x_label_height = 5 * ImageFontHeight($this->small_font);			}		}		$this->SetMargins();		return true;	} //function SetXLabelHeight	function SetYLabelWidth() {		//$ylab = sprintf("%6.1f %s",$i,$si_units[0]);  //use for PHP2 compatibility		//the "." is for space. It isn't actually printed		$ylab = number_format($this->max_y, $this->y_precision, ".", ",") . $this->si_units . ".";		if ($this->use_ttf == 1) {			$size = $this->TTFBBoxSize($this->axis_ttffont_size, 0, $this->axis_ttffont, $ylab);		} else {			$size[0] = StrLen($ylab) * $this->small_font_width * .6;		}		$this->y_label_width = $size[0] * 2;//echo "SYLW: $this->y_label_width<br>";//exit;		$this->SetMargins();		return true;	}	function SetEqualXCoord() {		//for plots that have equally spaced x variables and multiple bars per x-point.		$space = ($this->plot_area[2] - $this->plot_area[0]) / ($this->number_x_points * 2) * $this->group_frac_width;		$group_width = $space * 2;		$bar_width = $group_width / $this->records_per_group;  //I think that eventually this space variable will be replaced by just graphing x.		$this->data_group_space = $space;		$this->record_bar_width = $bar_width;		return true;	}	function SetLabelScalePosition($which_blp) {		//0 to 1		$this->label_scale_position = $which_blp;		return true;	}	function SetErrorBarSize($which_ebs) {		//in pixels		$this->error_bar_size = $which_ebs;		return true;	}	function SetErrorBarShape($which_ebs) {		//in pixels		$this->error_bar_shape = $which_ebs;		return true;	}	function SetPointShape($which_pt) {		//in pixels		$this->point_shape = $which_pt;		return true;	}	function SetPointSize($which_ps) {		//in pixels		SetType($which_ps,'integer');		$this->point_size = $which_ps;		if ($this->point_shape == "diamond" or $this->point_shape == "triangle") {			if ($this->point_size % 2 != 0) {				$this->point_size++;			}		}		return true;	}	function SetDataType($which_dt) {		//The next three lines are for past compatibility.		if ($which_dt == "text-linear") { $which_dt = "text-data"; };		if ($which_dt == "linear-linear") { $which_dt = "data-data"; };		if ($which_dt == "linear-linear-error") { $which_dt = "data-data-error"; };		$this->data_type = $which_dt; //text-data, data-data, data-data-error		return true;	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -