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
|
<?php
/**
* Piwik - Open source web analytics
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html Gpl v3 or later
* @version $Id$
*
* @category Piwik
* @package Piwik
*/
// no direct access
defined('PIWIK_INCLUDE_PATH') or die;
/**
* @see libs/sparkline/lib/Sparkline_Line.php
* @link http://sparkline.org
*/
require_once PIWIK_INCLUDE_PATH . '/libs/sparkline/lib/Sparkline_Line.php';
/**
* Renders a sparkline image given a PHP data array.
* Using the Sparkline PHP Graphing Library sparkline.org
*
* @package Piwik
* @subpackage Piwik_Visualization
*/
class Piwik_Visualization_Sparkline implements Piwik_iView
{
/**
* Array with format: array( x, y, z, ... )
* @param array $data
*/
function setValues($data)
{
$this->values = $data;
}
static public function getWidth()
{
return 100;
}
static public function getHeight()
{
return 25;
}
function main()
{
$width = self::getWidth();
$height = self::getHeight();
$data = $this->values;
$sparkline = new Sparkline_Line();
$sparkline->SetColor('lineColor', 22, 44, 74); // dark blue
$sparkline->SetColorHtml('red', '#FF7F7F');
$sparkline->SetColorHtml('blue', '#55AAFF');
$sparkline->SetColorHtml('green', '#75BF7C');
$data = array_reverse($data);
$min = $max = $last = null;
$i = 0;
foreach($this->values as $value)
{
$sparkline->SetData($i, $value);
if( null == $min || $value <= $min[1])
{
$min = array($i, $value);
}
if(null == $max || $value >= $max[1])
{
$max = array($i, $value);
}
$last = array($i, $value);
$i++;
}
$sparkline->SetYMin(0);
$sparkline->setYMax($max[1] + 0.5); // the +0.5 seems to be mandatory to not lose some pixels when value = max
$sparkline->SetPadding( 3, 0, 2, 0);
$font = FONT_2;
// the -0.5 is a hack as the sparkline samping rendering is obviously slightly bugged
// (see also fix marked as //FIX FROM PIWIK in libs/sparkline/lib/Sparkline.php)
$sparkline->SetFeaturePoint($min[0] -1, $min[1], 'red', 5);
$sparkline->SetFeaturePoint($max[0] -1, $max[1], 'green', 5);
$sparkline->SetFeaturePoint($last[0] -1, $last[1], 'blue', 5);
$sparkline->SetLineSize(3); // for renderresampled, linesize is on virtual image
$ratio = 1;
// var_dump($min);var_dump($max);var_dump($lasts);exit;
$sparkline->RenderResampled($width*$ratio, $height*$ratio);
$this->sparkline = $sparkline;
}
function render()
{
$this->sparkline->Output();
}
}
|