Jump to content
  • Advertisement
Sign in to follow this  
benryves

[web] Free PHP graphing control - GD1 only

This topic is 5202 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I'm developing a website on which reports need to be generated with simple graphs on them - bar charts or the like. I've hacked together a very simplistic graphing control, but it doesn't do things like label values up the axes - and I have no idea how to do that. It would save on time if someone could point me to a decent free PHP file to do this - I have GD1 only and no access to the actual machine to update the version of PHP (4.1) running on it. The ability to export to PNG/JPEG would be ideal (as a file) so I could also link them together to the PDF class I'm using - though this is less of a consideration. Many thanks in advance [grin]

Share this post


Link to post
Share on other sites
Advertisement
Quote:
Original post by evolutional
phpDynagraph may help (GD 1.4) ... phpGD Bar Graph too...

I'm assuming by coding your own you mean hack together a chart using scaled gifs? [grin]


Why would I do that? [grin] No, it generates a PNG through PHP:

<script language="php">
# Graphing control for PHP.
# Output format: PNG (because PNG rocks).
# To use:
# Append settings to the URL.
# For example: to draw a graph with simple data of 1,2,3,4, size 640x480 do this:
#
#
# Settings:
# Name Type Comments
# width number width of image (320)
# height number height of image (200)
# border number padding around graph itself (32)
# data number list list of variables, comma separated
# labels number list list of labels for the data, comma separated
# colours hex list list of colours for each data element (list of colours)
# drawaxes boolean draw axes (true)
# backcolour hex graph background colour (FFFFFF)
# labelcolour hex colour for axes, data labels &c {000000)
#
# Types:
# number: just a number (eg: 120)
# number list: comma separated list (eg: 12,43,12)
# hex: 3-byte hex value (eg: 00FFCC)
# hex list: comma separated list of hex numbers (eg: CC9900,330099,99CC00)
# boolean: true or false boolean switch

# Set up the correct header:
header("Content-type: image/png");

# Get width and height details:

if (isset($_REQUEST['width'])) {
$width = $_REQUEST['width'];
} else {
$width = 320;
}

if (isset($_REQUEST['height'])) {
$height = $_REQUEST['height'];
} else {
$height = 200;
}

if (isset($_REQUEST['border'])) {
$border = $_REQUEST['border'];
} else {
$border = 32;
}

if (isset($_REQUEST['backcolour'])) {
$backcolour = $_REQUEST['backcolour'];
} else {
$backcolour = 'FFFFFF';
}

if (isset($_REQUEST['labelcolour'])) {
$labelcolour = $_REQUEST['labelcolour'];
} else {
$labelcolour = '000000';
}

if (isset($_REQUEST['gridcolour'])) {
$gridcolour = $_REQUEST['gridcolour'];
} else {
$gridcolour = '808080';
}

if (!isset($_REQUEST['drawaxes'])) {
$drawaxes = true;
} else {
if ($_REQUEST['drawaxes']=='true') {
$drawaxes = true;
} else {
$drawaxes = false;
}
}

if (isset($_REQUEST['colours'])) {
$colours = explode(',',$_REQUEST['colours'].',');
} else {
$colours = array
(
'000000',
'000080',
'0000FF',
'008000',
'00FF00',
'00FF80',
'00FFFF',
'800000',
'FF0000',
'FF0080',
'FF00FF',
'FF80FF'
);
}

$graph = ImageCreate($width,$height);

# Clear to back colour
ImageFill($graph,0,0,setColour($backcolour));

if (!isset($_REQUEST['data'])) {
imagestring($graph, 2, 0, 0, "No data specified", imagecolorallocate($graph,0,0,0));
imagepng($graph);
imagedestroy($graph);
die();
} else {
$data = explode(',',$_REQUEST['data'].',');
$datapoints = -1;
foreach ($data as $d) {
$datapoints++;
}
}



if (isset($_REQUEST['labels'])) {
$labels = explode(',',$_REQUEST['labels'].',');
}

if (!isset($_REQUEST['type'])) {
$type = "bar";
} else {
$type = $_REQUEST['type'];
}

if ($type=="bar") {

if ($drawaxes) {
imageline($graph,$border,$border,$border,$height-$border,setColour($labelcolour));
imageline($graph,$border,$height-$border,$width-$border,$height-$border,setColour($labelcolour));
}

$max = 0;
foreach($data as $val) {
if ($val>$max) {
$max = $val;
}
}

$colw = ($width-2*$border)/$datapoints;
$cpointer = 0;
for ($c=0; $c<$datapoints; $c++) {
$colh = $data[$c]/$max*($height-2*$border);
imagefilledrectangle ($graph, $c*$colw+$border, $height-$border-$colh , ($c+1)*$colw+$border-1, $height-$border,setColour($colours[$cpointer]));
$cpointer++;
if ($cpointer>=count($colours)-1) {
$cpointer=0;
}
}

if ($drawaxes) {
imageline($graph,$border,$border,$border,$height-$border,setColour($labelcolour));
imageline($graph,$border,$height-$border,$width-$border,$height-$border,setColour($labelcolour));
}
}

# Stream and destroy from memory
imagepng($graph);
imagedestroy($graph);

function setColour($colour) {
global $graph;
$r = hexdec(substr($colour,0,2));
$g = hexdec(substr($colour,2,2));
$b = hexdec(substr($colour,4,2));
return imagecolorallocate($graph,$r,$g,$b);
}

</script>



As you can tell; I haven't got all too far with it [sad]
Thanks; I'll look into the ones you mentioned!

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!