Maison php教程 PHP源码 php 画折线图表

php 画折线图表

May 25, 2016 pm 05:09 PM

php代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

<?php

/******************************

*      折线图生成函数

*      youd

*      090207-01

******************************/

function line_stats_pic($value_y,$width,$high,$strong=1,$fix=0){

//y值处理函数

function line_point_y($num,$width,$high,$max_num_add,$min_num_add,$y_pxdensity){

  $return=$high-floor(($num-$min_num_add+$y_pxdensity)/(($max_num_add-$min_num_add)/$high));

  return $return;

}

 

//参数处理

$allnum=sizeof($value_y);

$max_num=max($value_y);              //最大值

$min_num=min($value_y);              //最小值

$limit_m=$max_num-$min_num;            //极差

$max_num_add=$max_num+$limit_m*0.1;        //轴最大值

$min_num_add=$min_num-$limit_m*0.1;        //轴最小值

$limit=$max_num_add-$min_num_add;         //极差-坐标轴y

$y_pxdensity=($max_num_add-$min_num_add)/$high//y轴密度

$x_pxdensity=floor($width/$allnum);        //x轴密度

reset($value_y);                 //将数组指针归零

$i=0;

foreach($value_y as $val){

  $point_y[$i]=line_point_y($val,$width,$high,$max_num_add,$min_num_add,$y_pxdensity);

  $i++;

}

$zero_y=line_point_y(0,$width,$high,$max_num_add,$min_num_add,$y_pxdensity);  //零点的y值

$empty_size_x=(strlen($max_num) > strlen($min_num) ? strlen($max_num) : strlen($min_num))*5+3;          //左边空白

 

//图片流开始

header("Content-type:image/png");

$pic=imagecreate($width+$empty_size_x+10,$high+13);

imagecolorallocate($pic,255,255,255);     //背景色

$color_1=imagecolorallocate($pic,30,144,255); //线条色

$color_2=imagecolorallocate($pic,0,0,0);   //黑色

$color_3=imagecolorallocate($pic,194,194,194);//灰色

//绘制网格

imagesetthickness($pic,1);          //网格线宽

$y_line_width=floor($width/100);       //纵网格线数目

$y_line_density=$y_line_width==0 ? 0 :floor($width/$y_line_width); //纵网格线密度

$point_zero_y=$zero_y > $high ? $high : $zero_y;

imagestring($pic,1,$empty_size_x-1,$high+4,"0",$color_2); //零点数轴标记

for($i=1;$i <= $y_line_width;$i++){      //绘制纵网格线

  imagesetthickness($pic,1);         //网格线宽

  imageline($pic,$y_line_density*$i+$empty_size_x,0,$y_line_density*$i+$empty_size_x,$high,$color_3);

  imagesetthickness($pic,2);         //轴点线宽

  imageline($pic,$y_line_density*$i+$empty_size_x,$point_zero_y-4,$y_line_density*$i+$empty_size_x,$point_zero_y,$color_2);

  imagestring($pic,1,100*$i+$empty_size_x-5,$high+4,$allnum/$y_line_width*$i,$color_2);  //数轴标记

}

$x_line_width=floor($high/30);        //横网格线数目

$x_line_density=$x_line_width==0 ? 0 :floor($high/$y_line_width);  //横网格线密度

if($zero_y > $high){             //绘制横网格线

  imagestring($pic,1,0,$high-3,round($min_num_add,$fix),$color_2); //零点数轴标记

  for($i=1;$i <= $x_line_width;$i++){

   imagesetthickness($pic,1);        //网格线宽

   imageline($pic,0+$empty_size_x,$high-$x_line_density*$i,$width+$empty_size_x,$high-$x_line_density*$i,$color_3);

   imagesetthickness($pic,2);        //轴点线宽

   imageline($pic,0+$empty_size_x,$high-$x_line_density*$i,3+$empty_size_x,$high-$x_line_density*$i,$color_2);

   imagestring($pic,1,0,$high-$x_line_density*$i-3,round($limit/$x_line_width*$i+$min_num_add,$fix),$color_2);  //数轴标记

  }

}else{

  imagestring($pic,1,$empty_size_x-8,$zero_y,"0",$color_2); //零点数轴标记

  for($i=1;$i <= ceil($x_line_width/2);$i++){

   imagesetthickness($pic,1);        //网格线宽

   imageline($pic,0+$empty_size_x,$zero_y-$x_line_density*$i,$width+$empty_size_x,$zero_y-$x_line_density*$i,$color_3);

   if($zero_y+$x_line_density*$i < $high){

    imageline($pic,0+$empty_size_x,$zero_y+$x_line_density*$i,$width+$empty_size_x,$zero_y+$x_line_density*$i,$color_3);

   }

   imagesetthickness($pic,2);        //轴点线宽

   imageline($pic,0+$empty_size_x,$zero_y-$x_line_density*$i,3+$empty_size_x,$zero_y-$x_line_density*$i,$color_2);

   if($zero_y+$x_line_density*$i < $high){

    imageline($pic,0+$empty_size_x,$zero_y+$x_line_density*$i,3+$empty_size_x,$zero_y+$x_line_density*$i,$color_2);

   }

   imagestring($pic,1,0,$zero_y-$x_line_density*$i-3,round($limit/$x_line_width*$i,$fix),$color_2);   //数轴标记

   if($zero_y+$x_line_density*$i < $high){

    imagestring($pic,1,0,$zero_y+$x_line_density*$i-3,round(-$limit/$x_line_width*$i,$fix),$color_2);  //数轴标记

   }

  }

}

//绘制轴线

imagesetthickness($pic,2);          //轴线宽

imageline($pic,1+$empty_size_x,0,1+$empty_size_x,$high,$color_2);

if($zero_y > $high){             //x轴位置

  imageline($pic,0+$empty_size_x,$high,$width+$empty_size_x,$high,$color_2);

}else{

  imageline($pic,0+$empty_size_x,$zero_y,$width+$empty_size_x,$zero_y,$color_2);

}

//产生折线

$point_x=0;

$j=0;

imagesetthickness($pic,$strong);       //线条粗细

while($j+1 < $allnum){

  imageline($pic,$point_x+2+$empty_size_x,$point_y[$j],$point_x+$x_pxdensity+2+$empty_size_x,$point_y[$j+1],$color_1);

  $point_x+=$x_pxdensity;

  $j++;

}

imagepng($pic);

imagedestroy($pic);

}

 

/*

函数描述及例子

参数说明:

$value_y -------- 包含你想生成折线图的数组,要求键值从0开始递增。

$width--------生成的折线图的网格宽度(不算白边)

$high--------高度

$strong-------线条粗细(默认为1)

$fix-------数据保留的位数(默认为取整)

*/

 

for($i=0;$i<100;$i++){

    $value = rand(1,200);

    $value_y[]=$value;

}

line_stats_pic($value_y,500,100,1,1);

?>

Copier après la connexion
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)