function make_plot($plot_type, $data_type, $nx, $ny) { $plot = new PHPlot(1280, 1024); $plot->SetPrintImage(False); $plot->SetFailureImage(False); $plot->SetDataType($data_type); $plot->SetDataValues(make_data_array($plot_type, $data_type, $nx, $ny, 100)); $plot->SetPlotType($plot_type); $plot->SetTitle("Serialize/Unserialize Tests\n{$plot_type} - {$data_type}"); $plot->SetXTickIncrement(5); $plot->SetYTickIncrement(10); $plot->SetPlotBorderType('full'); $plot->SetDrawXGrid(True); $plot->SetDrawYGrid(True); $plot->SetXTitle('X Axis Title'); $plot->SetYTitle('Y Axis Title'); # Select data labels or tick labels based on data type: if ($data_type == 'data-data') { $plot->SetXDataLabelPos('none'); $plot->SetXTickLabelPos('plotdown'); $plot->SetXTickPos('plotdown'); } elseif ($data_type == 'text-data') { $plot->SetXDataLabelPos('plotdown'); $plot->SetXTickLabelPos('none'); $plot->SetXTickPos('none'); } elseif ($data_type == 'data-data-yx') { $plot->SetYDataLabelPos('none'); $plot->SetYTickLabelPos('plotleft'); $plot->SetYTickPos('plotleft'); } elseif ($data_type == 'text-data-yx') { $plot->SetYDataLabelPos('plotleft'); $plot->SetYTickLabelPos('none'); $plot->SetYTickPos('none'); } return $plot; }
# Y2 = cos(x) $end = M_PI * 2.0; $delta = $end / 20.0; $data = array(); for ($x = 0; $x <= $end; $x += $delta) { $data[] = array('', $x, sin($x), cos($x)); } $plot = new PHPlot(800, 600); $plot->SetImageBorderType('plain'); $plot->SetPlotType('lines'); $plot->SetDataType('data-data'); $plot->SetDataValues($data); # Main plot title: $plot->SetTitle('Line Plot, Sin and Cos'); # Make a legend for the 2 functions: $plot->SetLegend(array('sin(t)', 'cos(t)')); # Select a plot area and force ticks to nice values: $plot->SetPlotAreaWorld(0, -1, 6.8, 1); # Even though the data labels are empty, with numeric formatting they # will be output as zeros unless we turn them off: $plot->SetXDataLabelPos('none'); $plot->SetXTickIncrement(M_PI / 8.0); $plot->SetXLabelType('data'); $plot->SetPrecisionX(3); $plot->SetYTickIncrement(0.2); $plot->SetYLabelType('data'); $plot->SetPrecisionY(1); # Draw both grids: $plot->SetDrawXGrid(True); $plot->SetDrawYGrid(True); $plot->DrawGraph();
$plot->SetLightGridColor('black'); // So grid stands out from background # Plot 1 $plot->SetDrawPlotAreaBackground(True); $plot->SetPlotType('stackedbars'); $plot->SetDataType('text-data'); $plot->SetDataValues($data1); $plot->SetYTitle($y_title1); # Set and position legend #1: $plot->SetLegend($legend1); $plot->SetLegendPixels(5, 30); # Set margins to leave room for plot 2 Y title on the right. $plot->SetMarginsPixels(120, 120); # Specify Y range of these data sets: $plot->SetPlotAreaWorld(NULL, 0, NULL, 5000); $plot->SetYTickIncrement(500); $plot->SetXTickLabelPos('none'); $plot->SetXTickPos('none'); # Format Y tick labels as integers, with thousands separator: $plot->SetYLabelType('data', 0); $plot->DrawGraph(); # Plot 2 $plot->SetDrawPlotAreaBackground(False); // Cancel background $plot->SetDrawYGrid(False); // Cancel grid, already drawn $plot->SetPlotType('linepoints'); $plot->SetDataValues($data2); # Set Y title for plot #2 and position it on the right side: $plot->SetYTitle($y_title2, 'plotright'); # Set and position legend #2:
if ($tp['use_ttf']) { if (isset($tp['legendfont'])) { $p->SetFont('legend', $tp['legendfont'], $tp['ttfsize']); } else { $p->SetFont('legend', $tp['ttfont'], $tp['ttfsize']); } } elseif (isset($tp['legendfont'])) { $p->SetFont('legend', $tp['legendfont']); } $p->SetLegend($tp['text']); $p->SetDataType('data-data'); $p->SetDataValues($data); $p->SetPlotType('lines'); $p->SetXDataLabelPos('none'); $p->SetXTickIncrement(1.0); $p->SetYTickIncrement(1.0); if (isset($tp['textalign'])) { if (isset($tp['colorboxalign'])) { $p->SetLegendStyle($tp['textalign'], $tp['colorboxalign']); } else { $p->SetLegendStyle($tp['textalign']); } } if (isset($tp['px']) && isset($tp['py'])) { $p->SetLegendPixels($tp['px'], $tp['py']); } if (isset($tp['wx']) && isset($tp['wy'])) { $p->SetLegendWorld($tp['wx'], $tp['wy']); } if (isset($tp['cbwa'])) { $p->legend_colorbox_width = $tp['cbwa'];
# Printing helper function prif($name, &$var, $before = '') { return "{$before} {$name}=" . (isset($var) ? $var : "n/a"); } # Auto title: $title = 'X/Y Tick Anchors' . (empty($subtitle) ? "\n" : " - {$subtitle}\n") . prif('X tick anchor', $x_tick_anchor) . prif('Y tick anchor', $y_tick_anchor, ',') . prif('X tick inc.', $x_tick_step, ',') . prif('Y tick inc.', $y_tick_step, ','); $data = array(); for ($x = $start; $x <= $stop; $x += $delta) { $data[] = array('', $x, $x); } $plot = new PHPlot(800, 600); $plot->SetTitle($title); $plot->SetPlotType('lines'); $plot->SetDataType('data-data'); $plot->SetDataValues($data); $plot->SetDrawXGrid(True); $plot->SetDrawYGrid(True); if (isset($x_tick_step)) { $plot->SetXTickIncrement($x_tick_step); } if (isset($y_tick_step)) { $plot->SetYTickIncrement($y_tick_step); } if (isset($x_tick_anchor)) { $plot->SetXTickAnchor($x_tick_anchor); } if (isset($y_tick_anchor)) { $plot->SetYTickAnchor($y_tick_anchor); } $plot->DrawGraph();
# Testing phplot - Points require_once 'phplot.php'; # This array is used for both the point shapes and legend: $shapes = array('circle', 'cross', 'diamond', 'dot', 'halfline', 'line', 'plus', 'rect', 'triangle', 'trianglemid'); # 10 lines, one for each shape: $data = array(array('', 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10), array('', 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11), array('', 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), array('', 4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13), array('', 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14), array('', 6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), array('', 7, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16), array('', 8, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17), array('', 9, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18), array('', 10, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)); $p = new PHPlot(); $p->SetTitle('Points plots, 10 lines/10 shapes'); $p->SetDataType('data-data'); $p->SetDataValues($data); # We don't use the data labels (all set to '') so might as well turn them off: $p->SetXDataLabelPos('none'); # Need to set area and ticks to get reasonable choices. # Increase X range to make room for the legend. $p->SetPlotAreaWorld(0, 0, 13, 20); $p->SetXTickIncrement(1); $p->SetYTickIncrement(2); # Need 10 different colors; defaults are not different: $p->SetDataColors(array('red', 'green', 'blue', 'yellow', 'cyan', 'magenta', 'brown', 'lavender', 'pink', 'orange')); # Show all 10 shapes: $p->SetPointShapes($shapes); # Also show that as the legend: $p->SetLegend($shapes); # Make the points bigger so we can see them: $p->SetPointSizes(10); # Draw both grids: $p->SetDrawXGrid(True); $p->SetDrawYGrid(True); # The default $p->SetPlotType('points'); $p->DrawGraph();
$tp = array(); } $tp = array_merge(array('c' => 10, 't' => 1, 'ar' => FALSE), $tp); require_once 'phplot.php'; # Extract all test parameters as local variables: extract($tp); $title = "Log/Log Axis Test\nPlotting: XY = {$c}\n" . "Tick step: " . (empty($t) ? "Auto" : $t) . ", " . "Range: " . ($ar ? "Auto" : "Manually set"); # Plot X*Y=C $data = array(); for ($x = 1; $x <= $c; $x++) { $data[] = array('', $x, $c / $x); } $p = new PHPlot(800, 600); $p->SetDataType('data-data'); $p->SetDataValues($data); $p->SetTitle($title); $p->SetXScaleType('log'); $p->SetYScaleType('log'); if (empty($t)) { $p->SetXTickIncrement($t); $p->SetYTickIncrement($t); } if (!$ar) { $p->SetPlotAreaWorld(0, 1, $c + 1, $c + 1); } $p->SetXTickAnchor(0); $p->SetYTickAnchor(0); $p->SetDrawXGrid(True); $p->SetDrawYGrid(True); $p->SetPlotType('lines'); $p->DrawGraph();
<?php # PHPlot Example: Point chart with error bars require_once 'phplot.php'; $data = array(array('', 1, 23.5, 5, 5), array('', 2, 20.1, 3, 3), array('', 3, 19.1, 2, 2), array('', 4, 16.8, 3, 3), array('', 5, 18.4, 4, 6), array('', 6, 20.5, 3, 2), array('', 7, 23.2, 4, 4), array('', 8, 23.1, 5, 2), array('', 9, 24.5, 2, 2), array('', 10, 28.1, 2, 2)); $plot = new PHPlot(800, 600); $plot->SetImageBorderType('plain'); $plot->SetPlotType('points'); $plot->SetDataType('data-data-error'); $plot->SetDataValues($data); # Main plot title: $plot->SetTitle('Points Plot With Error Bars'); # Set data range and tick increments to get nice even numbers: $plot->SetPlotAreaWorld(0, 0, 11, 40); $plot->SetXTickIncrement(1); $plot->SetYTickIncrement(5); # Draw both grids: $plot->SetDrawXGrid(True); $plot->SetDrawYGrid(True); # Is default # Set some options for error bars: $plot->SetErrorBarShape('tee'); # Is default $plot->SetErrorBarSize(10); $plot->SetErrorBarLineWidth(2); # Use a darker color for the plot: $plot->SetDataColors('brown'); $plot->SetErrorBarColors('brown'); # Make the points bigger so we can see them: $plot->SetPointSizes(10); $plot->DrawGraph();
<?php # $Id$ # Test types of label formatting 2 (custom, data:3) require_once 'phplot.php'; function my_format($val, $arg) { $m = (int) ($val / 60); $h = (int) ($m / 60); $m %= 60; return sprintf("%dH%dM", $h, $m); } $data = array(); for ($i = 0; $i < 10; $i++) { $data[] = array('', 4000 * $i, 1234 * $i); } $p = new PHPlot(800, 600); $p->SetTitle("Label Format Test 2"); $p->SetDataType('data-data'); $p->SetDataValues($data); $p->SetXDataLabelPos('none'); $p->SetXTickIncrement(2000); $p->SetYTickIncrement(1000); $p->SetPlotType('lines'); $p->SetXLabelType('custom', 'my_format'); $p->SetXTitle("X: custom H:M"); $p->SetYLabelType('data', 3); $p->SetYTitle("Y: data, prec=3"); $p->DrawGraph();
function plot_guifi() { include drupal_get_path('module', 'guifi') . '/contrib/phplot/phplot.php'; $result = db_query("select COUNT(*) as num, MONTH(FROM_UNIXTIME(timestamp_created)) as mes, YEAR(FROM_UNIXTIME(timestamp_created)) as ano from {guifi_location} where status_flag='Working' GROUP BY YEAR(FROM_UNIXTIME(timestamp_created)),MONTH(FROM_UNIXTIME(timestamp_created)) "); $inicial = 5; $nreg = $inicial; $tot = 0; $ano = 2004; $mes = 5; $items = 2004; $label = ""; while ($record = db_fetch_object($result)) { if ($record->ano >= 2004) { if ($mes == 12) { $mes = 1; $ano++; } else { $mes++; } while ($ano < $record->ano || $mes < $record->mes) { $nreg++; if ($mes == 6) { $label = $ano; } else { $label = ''; } $data[] = array("{$label}", $nreg, $tot, ''); if ($mes == 12) { $mes = 1; $ano++; } else { $mes++; } } $tot += $record->num; $nreg++; if ($mes == 6) { $label = $ano; } else { $label = ''; } $data[] = array("{$label}", $nreg, $tot, ''); } else { $tot += $record->num; } } while ($mes < 12) { $nreg++; $mes++; if ($mes == 6) { $label = $ano; } else { $label = ''; } $data[] = array("{$label}", $nreg, ""); } $items = ($ano - $items + 1) * 12; if ($tot % 1000 < 30) { $data[$nreg - $inicial - 1][3] = $tot; $vt = floor($tot / 1000) * 1000; $vtitle = $vt . " " . t('Nodes') . "!!!"; $tcolor = 'red'; } else { $vtitle = t('Working nodes'); $tcolor = 'DimGrey'; } $shapes = array('none', 'circle'); $plot = new PHPlot(200, 150); $plot->SetPlotAreaWorld(0, 0, $items, NULL); $plot->SetFileFormat('png'); $plot->SetDataType("data-data"); $plot->SetDataValues($data); $plot->SetPlotType("linepoints"); $plot->SetYTickIncrement(2000); $plot->SetXTickIncrement(12); $plot->SetSkipBottomTick(TRUE); $plot->SetSkipLeftTick(TRUE); $plot->SetXAxisPosition(0); $plot->SetPointShapes($shapes); $plot->SetPointSizes(10); $plot->SetTickLength(3); $plot->SetDrawXGrid(TRUE); $plot->SetTickColor('grey'); $plot->SetTitle($vtitle); $plot->SetDrawXDataLabelLines(FALSE); $plot->SetXLabelAngle(0); $plot->SetXLabelType('custom', 'Plot1_LabelFormat'); $plot->SetGridColor('red'); $plot->SetPlotBorderType('left'); $plot->SetDataColors(array('orange')); $plot->SetTextColor('DimGrey'); $plot->SetTitleColor($tcolor); $plot->SetLightGridColor('grey'); $plot->SetBackgroundColor('white'); $plot->SetTransparentColor('white'); $plot->SetXTickLabelPos('none'); $plot->SetXDataLabelPos('plotdown'); $plot->SetIsInline(TRUE); $plot->DrawGraph(); }
/** * Adds raw image data of the graph to the output. * @param $opts FormOptions */ public function draw( FormOptions $opts ) { global $wgTranslatePHPlotFont, $wgLang; $width = $opts->getValue( 'width' ); $height = $opts->getValue( 'height' ); // Define the object $plot = new PHPlot( $width, $height ); list( $legend, $resData ) = $this->getData( $opts ); $count = count( $resData ); $skip = intval( $count / ( $width / 60 ) - 1 ); $i = $count; foreach ( $resData as $date => $edits ) { if ( $skip > 0 ) { if ( ( $count - $i ) % $skip !== 0 ) $date = ''; } if ( strpos( $date, ';' ) !== false ) { list( , $date ) = explode( ';', $date, 2 ); } array_unshift( $edits, $date ); $data[] = $edits; $i--; } $font = FCFontFinder::find( $wgLang->getCode() ); if ( $font ) { $plot->SetDefaultTTFont( $font ); } else { $plot->SetDefaultTTFont( $wgTranslatePHPlotFont ); } $plot->SetDataValues( $data ); if ( $legend !== null ) { $plot->SetLegend( $legend ); } $numberFont = FCFontFinder::find( 'en' ); $plot->setFont( 'x_label', $numberFont, 8 ); $plot->setFont( 'y_label', $numberFont, 8 ); $yTitle = wfMsg( 'translate-stats-' . $opts['count'] ); // Turn off X axis ticks and labels because they get in the way: $plot->SetYTitle( $yTitle ); $plot->SetXTickLabelPos( 'none' ); $plot->SetXTickPos( 'none' ); $plot->SetXLabelAngle( 45 ); $max = max( array_map( 'max', $resData ) ); $max = self::roundToSignificant( $max, 1 ); $max = round( $max, intval( -log( $max, 10 ) ) ); $yTick = 10; while ( $max / $yTick > $height / 20 ) { $yTick *= 2; } // If we have very small case, ensure that there is at least one tick $yTick = min( $max, $yTick ); $yTick = self::roundToSignificant( $yTick ); $plot->SetYTickIncrement( $yTick ); $plot->SetPlotAreaWorld( null, 0, null, $max ); $plot->SetTransparentColor( 'white' ); $plot->SetBackgroundColor( 'white' ); // Draw it $plot->DrawGraph(); }
$cumulateddata = array(); $max = 1; foreach ($stats->getTimestats($term, $REX['ADDON']['rexsearch_plugins'][$parent][$mypage]['settings']['searchtermselectmonthcount']) as $month) { $bardata[] = array(date('M', mktime(0, 0, 0, $month['m'], 1, 2010)) . "\n" . $month['count'], $month['count']); if ($month['count'] > $max) { $max = $month['count']; } } $title = $I18N->Msg('a587_stats_searchterm_timestats_title', empty($term) ? $I18N->Msg('a587_stats_searchterm_timestats_title0_all') : $I18N->Msg('a587_stats_searchterm_timestats_title0_single', $term), intval($_GET['monthcount'])); if (rex_lang_is_utf8()) { $title = utf8_decode($title); } // draw bars $plot = new PHPlot(700, 240); $plot->SetImageBorderType('none'); $plot->SetTransparentColor('white'); $plot->SetMarginsPixels(NULL, NULL, 26, NULL); # Make sure Y axis starts at 0: $plot->SetPlotAreaWorld(NULL, 0, NULL, NULL); $len = strlen('' . $max); $plot->SetYTickIncrement(max(1, ceil($max / pow(10, $len - 1)) * pow(10, $len - 2))); # Main plot title: $plot->SetTitle($title); $plot->SetFont('title', 3); // draw bars $plot->SetPlotType('bars'); $plot->SetDataType('text-data'); $plot->SetDataValues($bardata); $plot->SetDataColors(array('#14568a', '#2c8ce0', '#dfe9e9')); $plot->SetShading(ceil(48 / $REX['ADDON']['rexsearch_plugins'][$parent][$mypage]['settings']['searchtermselectmonthcount'])); $plot->DrawGraph();
// plotup, plotdown, both, none if ($stat['ytitle']) { $graph->SetYTitle($stat['ytitle'], 'plotleft'); } // plotleft, plotright, both, plotin, none // Remember that angles other than 90 are taken as 0 when working with fixed fonts. if (isset($stat['x_label_angle'])) { $graph->SetXLabelAngle($stat['x_label_angle']); } else { $graph->SetXLabelAngle(0); } $graph->SetYLabelAngle(0); if (!(isset($stat['tick_increment_y']) && $stat['tick_increment_y'])) { $stat['tick_increment_y'] = stats__get_y_increment($stat['data']); } $graph->SetYTickIncrement($stat['tick_increment_y']); $graph->SetXTickLabelPos('plotdown'); // plotup, plotdown, both, xaxis, none $graph->SetYTickLabelPos('both'); // plotleft, plotright, both, yaxis, none $graph->SetXTickPos('plotdown'); // plotup, plotdown, both, xaxis, none $graph->SetYTickPos('both'); // plotleft, plotright, both, yaxis, none //Set some data if ($stat['reverse_data']) { $data = array_reverse($stat['data']); } else { $data = $stat['data']; } $graph->SetDataValues($data);
<?php include "./data_date2.php"; include "../phplot.php"; $graph = new PHPlot(600, 400); $graph->SetPrintImage(0); //Don't draw the image yet $graph->SetDataType("data-data-error"); //Must be called before SetDataValues $graph->SetNewPlotAreaPixels(90, 40, 540, 190); $graph->SetDataValues($example_data); $graph->SetXLabelType("time"); $graph->SetXLabelAngle(90); $graph->SetXTitle(""); $graph->SetYTitle("Price"); $graph->SetYTickIncrement(20); $graph->SetXTickIncrement(2679000); $graph->SetXTimeFormat("%b %y"); $graph->SetPlotType("lines"); $graph->SetErrorBarShape("line"); $graph->SetPointShape("halfline"); $graph->SetYScaleType("log"); $graph->SetLineWidths(array(1)); $graph->SetPlotAreaWorld(883634400, 1, 915095000, 140); $graph->SetXDataLabelPos('none'); $graph->DrawGraph(); //Now do the second chart on the image unset($example_data); $graph->SetYScaleType("linear"); include "./data_date.php"; $graph->SetDataType("data-data");
/** * drawing the graph for a evaluation question * * @param array() $data * @param string $evalquestion_id */ function do_graph($data, $evalquestion_id) { global $tmp_path_export, $auth, $PATH_EXPORT; $type = do_graph_template(); //Define the object if ($type == "pie") { // Beim pie muss die Zeichenflaeche etwas groesser gewaehlt werden... $graph = new PHPlot(500, 300); } else { $graph = new PHPlot(300, 250); } if ($type == "pie") { // Beim pie muss das Array umgeformt werden. Bug in PHPlot? $tmp = array(); $tmp2 = array(); $legend = array(); array_push($tmp, "Test"); foreach ($data as $k => $d) { array_push($tmp, $d[1]); array_push($legend, $d[0]); } array_push($tmp2, $tmp); $data = $tmp2; $graph->SetLegend($legend); } //Data Colors $graph->SetDataColors(array("blue", "green", "yellow", "red", "PeachPuff", "orange", "pink", "lavender", "navy", "peru", "salmon", "maroon", "magenta", "orchid", "ivory"), array("black")); $max_x = max(array_map('next', $data)); $graph->SetPlotAreaWorld(NULL, 0); // y-achse bei 0 starten $graph->SetPrecisionY(0); //anzahl kommastellen y-achse $graph->SetYTickIncrement($max_x < 10 ? 1 : round($max_x / 10)); $graph->SetPlotBgColor(array(222, 222, 222)); $graph->SetDataType("text-data"); $graph->SetFileFormat(Config::get()->EVAL_AUSWERTUNG_GRAPH_FORMAT); $graph->SetOutputFile($tmp_path_export . "/evalsum" . $evalquestion_id . $auth->auth["uid"] . "." . Config::get()->EVAL_AUSWERTUNG_GRAPH_FORMAT); $graph->SetIsInline(true); $graph->SetDataValues($data); $graph->SetPlotType($type); $graph->SetXLabelAngle(count($data) < 10 ? 0 : 90); //$graph->SetShading(0); // kein 3D $graph->SetLineWidth(1); $graph->SetDrawXDataLabels(true); //Draw it $graph->DrawGraph(); }
$title = "Test Attribute Resets:\n"; if (empty($test_resets)) { $title .= 'Baseline - red border, formatted labels'; } else { $title .= 'Reset to no border, no label formatting'; } $plot = new PHPlot(400, 400); $plot->SetTitle($title); $plot->SetPlotType('lines'); $plot->SetDataType('data-data'); $plot->SetDataValues($data); $plot->SetPlotAreaWorld(-1000, 0); $plot->SetXDataLabelPos('none'); $plot->SetXTickIncrement(500); $plot->SetXLabelType('data', 0, '', 'M'); $plot->SetYTickIncrement(200000); $plot->SetYLabelType('data', 2); $plot->SetImageBorderType('raised'); $plot->SetImageBorderColor('red'); $plot->SetDrawXGrid(False); $plot->SetDrawYGrid(False); # Set $test_resets=True and include this file to test resets: if (!empty($test_resets)) { # Reset to no border: $plot->SetImageBorderType('none'); # Reset X to no formatting using empty string: $plot->SetXLabelType(''); # Reset Y to no formatting using no argument: $plot->SetYLabelType(); } $plot->DrawGraph();
require 'mem_image.php'; $graph = new PHPlot(500, 300); $graph->SetDataType('data-data'); //Specify some data $data = array(array('', 2000, 750), array('', 2010, 1700), array('', 2015, 2000), array('', 2020, 1800), array('', 2025, 1300), array('', 2030, 400)); $graph->SetDataValues($data); //Specify plotting area details $graph->SetPlotType('lines'); $graph->SetTitleFontSize('2'); $graph->SetTitle('Social Security trust fund asset estimates, in $ billions'); $graph->SetMarginsPixels(null, null, 40, null); $graph->SetPlotAreaWorld(2000, 0, 2035, 2000); $graph->SetPlotBgColor('white'); $graph->SetPlotBorderType('left'); $graph->SetBackgroundColor('white'); $graph->SetDataColors(array('red'), array('black')); //Define the X axis $graph->SetXLabel('Year'); $graph->SetXTickIncrement(5); //Define the Y axis $graph->SetYTickIncrement(500); $graph->SetPrecisionY(0); $graph->SetLightGridColor('blue'); //Disable image output $graph->SetPrintImage(false); //Draw the graph $graph->DrawGraph(); $pdf = new PDF_MemImage(); $pdf->AddPage(); $pdf->GDImage($graph->img, 30, 20, 140); $pdf->Output();
<?php # $Id$ # PHPlot test: Return image encoded as raw require_once 'phplot.php'; $data = array(); for ($i = 0; $i <= 360; $i += 15) { $theta = deg2rad($i); $data[] = array('', $i, cos($theta), sin($theta)); } $p = new PHPlot(800, 600); $p->SetPrintImage(False); $p->SetFailureImage(False); $p->SetTitle('PHPlot Test - Raw Image Encoding'); $p->SetDataType('data-data'); $p->SetDataValues($data); $p->SetXDataLabelPos('none'); $p->SetXTickIncrement(90); $p->SetYTickIncrement(0.2); $p->SetPlotAreaWorld(0, -1, 360, 1); $p->SetDrawXGrid(True); $p->SetDrawYGrid(True); $p->SetPlotType('lines'); $p->DrawGraph(); $data = $p->EncodeImage('raw'); // fwrite(STDERR, "EncodeImage('raw') size = " . strlen($data) . "\n"); echo $data;
//print"<font color=red>$prevDay=$mkday</font><br>"; } $prevDay = $mkday; $prevDOfMonth = $DayOfMonth; } if ($debug) { print_r($allDays); } if ($debug) { print "I" . $maxValue . "I"; } include "../include/phplot/phplot.php"; $graph = new PHPlot(600, 300); $graph->SetDataType("text-data"); $graph->SetDataValues($allDays); $graph->SetYTickIncrement(); $graph->y_tick_increment = ceil(@$graph->y_tick_increment); $graph->SetXLabelType("time"); $graph->SetXTimeFormat("%b %d"); if ($incoming == '2') { $graph->SetLegend(array("Outgoing")); $graph->SetDataColors(array('green')); } elseif ($incoming == '3') { $graph->SetLegend(array("Incoming")); $graph->SetDataColors(array('orange')); } else { $graph->SetLegend(array("All", "Outgoing", "Incoming")); } $graph->SetYTitle("Quantity of calls"); $graph->SetPlotType("bars"); $graph->SetXLabelAngle(90);
require_once 'phplot.php'; $data = array(); # This is a cubic equation with roots at -8, 2, 10 for ($x = -10; $x <= 10; $x++) { $data[] = array('', $x, ($x + 8) * ($x - 2) * ($x - 10)); } $p = new PHPlot(400, 800); $p->SetPrintImage(FALSE); $p->SetPlotBorderType('full'); $p->SetTitle("Set/Reset Parameters Test (1)\n" . "Top: Parameters Set\n" . "Bottom: Parameters Reset"); $p->SetDataType('data-data'); $p->SetDataValues($data); $p->SetPlotType('lines'); $p->SetLegend('Y = F(X)'); $p->SetLegendPixels(100, 200); $p->SetXTickIncrement(5.0); $p->SetYTickIncrement(50.0); $p->SetXTitle('X Axis'); $p->SetYTitle('Y Axis'); $p->SetXAxisPosition(-228); $p->SetYAxisPosition(7); $p->SetPlotAreaPixels(70, 80, 380, 400); $p->DrawGraph(); $p->SetLegendPixels(); $p->SetXTickIncrement(); $p->SetYTickIncrement(); $p->SetXAxisPosition(); $p->SetYAxisPosition(); $p->SetPlotAreaPixels(70, 450, 380, 750); $p->DrawGraph(); $p->PrintImage();
//Required Settings include "../phplot.php"; $graph = new PHPlot($xsize_in, $ysize_in); $graph->SetDataType($which_data_type); // Must be first thing $graph->SetDataValues($data); //Optional Settings (Don't need them) // $graph->SetTitle("This is a\n\rmultiple line title\n\rspanning three lines."); $graph->SetTitle($title); $graph->SetXTitle($xlbl, $which_xtitle_pos); $graph->SetYTitle($ylbl, $which_ytitle_pos); $graph->SetLegend(array("A", "Bee", "Cee", "Dee")); $graph->SetFileFormat($which_fileformat); $graph->SetPlotType($which_plot_type); $graph->SetUseTTF($which_use_ttf); $graph->SetYTickIncrement($which_yti); $graph->SetXTickIncrement($which_xti); $graph->SetXTickLength($which_xtl); $graph->SetYTickLength($which_ytl); $graph->SetXTickCrossing($which_xtc); $graph->SetYTickCrossing($which_ytc); $graph->SetXTickPos($which_xtick_pos); $graph->SetYTickPos($which_ytick_pos); $graph->SetShading($which_shading); $graph->SetLineWidth($which_line_width); $graph->SetErrorBarLineWidth($which_errorbar_line_width); $graph->SetDrawDashedGrid($which_dashed_grid); switch ($which_draw_grid) { case 'x': $graph->SetDrawXGrid(TRUE); $graph->SetDrawYGrid(FALSE);
function guifi_stats_chart05($nmonths) { include drupal_get_path('module', 'guifi') . '/contrib/phplot/phplot.php'; $gDirTTFfonts = drupal_get_path('module', 'guifi') . '/contrib/fonts/'; if (isset($_GET['width'])) { $gwidth = $_GET['width']; } else { $gwidth = 500; } if (isset($_GET['height'])) { $gheight = $_GET['height']; } else { $gheight = 450; } if (isset($_GET['zone'])) { $zone_id = $_GET['zone']; if ($zone_id == "3671") { $zone_id = "0"; } } else { $zone_id = "0"; } $vsql = "select COUNT(*) as num, MONTH(FROM_UNIXTIME(timestamp_created)) as mes, YEAR(FROM_UNIXTIME(timestamp_created)) as ano \n from {guifi_location}\n where status_flag='Working' "; if ($zone_id != "0") { $achilds = guifi_zone_childs($zone_id); $v = ""; foreach ($achilds as $key => $child) { if ($v == "") { $v .= "zone_id=" . $child; } else { $v .= " or zone_id=" . $child; } } $vsql .= "AND (" . $v . ") "; } $vsql .= "GROUP BY YEAR(FROM_UNIXTIME(timestamp_created)),MONTH(FROM_UNIXTIME(timestamp_created)) "; $result = db_query($vsql); $inicial = 5; $nreg = $inicial; $tot = 0; $ano = 2004; $mes = 5; $items = 2004; $label = "a"; $n = 0; $med = 0; $datos = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); $today = getdate(); if ($nmonths == 0) { $nmonths = 12; } $max = 0; while ($record = db_fetch_object($result)) { if ($record->ano >= 2004) { if ($mes == 12) { $mes = 1; $ano++; } else { $mes++; } if ($ano == $today[year] && $mes >= $today[mon]) { if ($mes == 1) { $mes = 12; $ano--; } else { $mes--; } break; } while ($ano < $record->ano || $mes < $record->mes) { $nreg++; if ($mes == 6) { $label = $ano; } else { $label = ''; } if ($n == 0) { $tot += $record->num; } else { $tot = $record->num; } $tot2 = fmediacalc($tot, $datos, $n, $nmonths); $data[] = array("{$label}", $nreg, $tot2); if (floor($tot2) > $max) { $max = floor($tot2); } if ($mes == 12) { $mes = 1; $ano++; } else { $mes++; } } $tot += $record->num; $nreg++; if ($mes == 6) { $label = $ano; } else { $label = ''; } if ($n == 0) { $tot += $record->num; } else { $tot = $record->num; } $tot2 = fmediacalc($tot, $datos, $n, $nmonths); $data[] = array("{$label}", $nreg, $tot2); if (floor($tot2) > $max) { $max = floor($tot2); } } else { $tot += $record->num; } } while ($mes < 12) { $nreg++; $mes++; if ($mes == 6) { $label = $ano; } else { $label = ''; } $data[] = array("{$label}", $nreg, ""); } if ($tot <= 10) { $inc = 1; } else { $vlen = strlen($max); $vini = substr($max, 0, 1); $inc = str_pad($vini, $vlen - 1, "0"); } $items = ($ano - $items + 1) * 12; $shapes = array('none'); $plot = new PHPlot($gwidth, $gheight); $plot->SetPlotAreaWorld(0, 0, $items, NULL); $plot->SetFileFormat('png'); $plot->SetDataType("data-data"); $plot->SetDataValues($data); $plot->SetPlotType("linepoints"); $plot->SetYTickIncrement($inc); $plot->SetXTickIncrement(12); $plot->SetSkipBottomTick(TRUE); $plot->SetSkipLeftTick(TRUE); $plot->SetXAxisPosition(0); $plot->SetPointShapes($shapes); $plot->SetPointSizes(10); $plot->SetTickLength(3); $plot->SetDrawXGrid(TRUE); $plot->SetTickColor('grey'); $plot->SetTTFPath($gDirTTFfonts); $plot->SetFontTTF('title', 'Vera.ttf', 12); if (isset($_GET['title'])) { $plot->SetTitle("guifi.net \n" . t($_GET['title'])); } else { if ($zone_id == "0") { $plot->SetTitle("guifi.net \n" . t('Nodes per month, ' . "{$nmonths}" . ' months average')); } else { $plot->SetTitle("guifi.net " . t('zone') . ": " . guifi_get_zone_name($zone_id) . "\n" . t('Nodes per month, ' . "{$nmonths}" . ' months average')); } } $plot->SetXTitle(t('Years')); $plot->SetYTitle(t('Working nodes')); $plot->SetDrawXDataLabelLines(FALSE); $plot->SetXLabelAngle(0); $plot->SetXLabelType('custom', 'guifi_stats_chart05_LabelFormat'); $plot->SetGridColor('red'); $plot->SetPlotBorderType('left'); $plot->SetDataColors(array('orange')); $plot->SetTextColor('DimGrey'); $plot->SetTitleColor('DimGrey'); $plot->SetLightGridColor('grey'); $plot->SetBackgroundColor('white'); $plot->SetTransparentColor('white'); $plot->SetXTickLabelPos('none'); $plot->SetXDataLabelPos('plotdown'); $plot->SetIsInline(TRUE); $plot->DrawGraph(); }
<?php # $Id$ # Test: area plot with raised X axis require_once 'phplot.php'; $data = array(array('A', 4, 3, 2, 1), array('B', 5, 4, 3, 2), array('C', 6, 5, 4, 3), array('D', 7, 6, 5, 4)); $plot = new PHPlot(800, 600); $plot->SetTitle('Area plot with X axis raised to 3'); $plot->SetPlotType('area'); $plot->SetDataType('text-data'); $plot->SetDataValues($data); $plot->SetXAxisPosition(3); $plot->SetYTickIncrement(1); $plot->SetXTickLabelPos('none'); $plot->SetXTickPos('none'); $plot->DrawGraph();
function BuatBarGraph($filetujuan, $prevtahun, $tahun, $arrStatusAplikan, $urutan, $gel) { $arrPrevTotal = array(); $arrCurTotal = array(); FillArrayPeriod($arrPrevTotal, $arrStatusAplikan, $prevtahun, $gel); FillArrayPeriod($arrCurTotal, $arrStatusAplikan, $tahun, $gel); $maxPrevHeight = 0; $maxCurHeight = 0; foreach ($arrStatusAplikan as $stat) { $data[] = array($stat, $arrPrevTotal[$stat], $arrCurTotal[$stat]); $maxPrevHeight = $maxPrevHeight < $arrPrevTotal[$stat] ? $arrPrevTotal[$stat] : $maxPrevHeight; $maxCurHeight = $maxCurHeight < $arrCurTotal[$stat] ? $arrCurTotal[$stat] : $maxCurHeight; } $plot = new PHPlot(800, 600); //$plot->SetImageBorderType('raised'); $plot->SetFont('y_label', 5); $plot->SetFont('x_label', 5); $plot->SetFont('title', 5); $plot->SetFont('legend', 5); $plot->setShading(10); $plot->SetPlotType('bars'); $plot->SetDataType('text-data'); $plot->SetDataValues($data); $plot->SetTitle('GRAFIK & DATA PMB GEL SISIPAN'); $plot->SetLegend(array($prevtahun, $tahun)); $plot->SetXTickLabelPos('none'); $plot->SetXTickPos('none'); $maxHeight = $maxPrevHeight < $maxCurHeight ? $maxCurHeight : $maxPrevHeight; $increment = $maxHeight <= 50 ? 5 : ($maxHeight <= 100 ? 10 : ($maxHeight <= 500 ? 50 : 100)); $plot->SetYTickIncrement($increment); $plot->SetYDataLabelPos('plotin'); $plot->SetIsInline(true); $plot->SetOutputFile($filetujuan); $plot->DrawGraph(); }
require_once 'phplot.php'; $np = $tp['nlines']; $data = array(); for ($i = 1; $i <= 20; $i++) { $row = array('', $i); for ($j = 1; $j <= $np; $j++) { $row[] = $i + $j; } $data[] = $row; } $p = new PHPlot(800, 600); $p->SetTitle($tp['title'] . $tp['suffix']); $p->SetDataType('data-data'); $p->SetDataValues($data); $p->SetPlotAreaWorld(0, 0, 21, 40); $p->SetXTickIncrement(1); $p->SetYTickIncrement(5); # Options: if (isset($tp['LWidths'])) { $p->SetLineWidths($tp['LWidths']); } if (isset($tp['DStyle'])) { $p->SetDefaultDashedStyle($tp['DStyle']); } if (isset($tp['LStyles'])) { $p->SetLineStyles($tp['LStyles']); } $p->SetDrawXGrid(False); $p->SetDrawYGrid(False); $p->SetPlotType('lines'); $p->DrawGraph();
# this script. The parameters are shown in the defaults array below: if (!isset($tp)) { $tp = array(); } $tp = array_merge(array('title' => 'Tick Count:', 'xmin' => 0, 'xmax' => 98, 'ymin' => 0, 'ymax' => 55, 'xti' => 10, 'yti' => 10), $tp); require_once 'phplot.php'; # The data points don't matter at all. The range is set with SetPlotAreaWorld. $data = array(array('', 0, 0), array('', 1, 1)); $p = new PHPlot(); $subtitle = " World: ({$tp['xmin']}, {$tp['ymin']}) :" . " ({$tp['xmax']}, {$tp['ymax']})" . " Tickstep: ({$tp['xti']}, {$tp['yti']})"; $p->SetTitle($tp['title'] . $subtitle); $p->SetDataType('data-data'); $p->SetDataValues($data); $p->SetXDataLabelPos('none'); $p->SetXTitle('X'); $p->SetYTitle('Y'); $p->SetPlotAreaWorld($tp['xmin'], $tp['ymin'], $tp['xmax'], $tp['ymax']); $p->SetXTickIncrement($tp['xti']); $p->SetYTickIncrement($tp['yti']); #$p->SetSkipTopTick(False); # Draw both grids: $p->SetDrawXGrid(True); $p->SetDrawYGrid(True); # Axes on all sides: $p->SetXTickPos('both'); $p->SetXTickLabelPos('both'); $p->SetYTickPos('both'); $p->SetYTickLabelPos('both'); $p->SetPlotBorderType('full'); $p->SetPlotType('lines'); $p->DrawGraph();
<?php # $Id$ # Testing phplot - data-data ordering require_once 'phplot.php'; # 10 lines, one for each shape: $data = array(array('', 1, 20), array('', 2, 2), array('', 3, 19), array('', 4, 3), array('', 6, 4), array('', 7, 17), array('', 8, 5), array('', 9, 16), array('', 5, 18), array('', 10, 6)); $p = new PHPlot(); $p->SetTitle('Out-of-order data-data points'); $p->SetPlotType('lines'); $p->SetDataType('data-data'); $p->SetDataValues($data); $p->SetPlotAreaWorld(0, 0, 12, 25); $p->SetXTickIncrement(1); $p->SetYTickIncrement(1); # We don't use the data labels (all set to '') so might as well turn them off: $p->SetXDataLabelPos('none'); # Draw both grids: $p->SetDrawXGrid(True); $p->SetDrawYGrid(True); # The default $p->DrawGraph();
/** * Generate a graph for this tag * @param string $tag * @param string $filePath * @return bool, success */ public function makePngGraph( $tag, $filePath ) { if( !function_exists( 'ImageCreate' ) ) { // GD is not installed return false; } global $wgPHPlotDir, $wgMemc; require_once( "$wgPHPlotDir/phplot.php" ); // load classes // Define the object $plot = new PHPlot( 1000, 400 ); // Set file path $dir = dirname($filePath); // Make sure directory exists if( !file_exists($dir) && !wfMkdirParents( $dir, 0777, __METHOD__ ) ) { throw new MWException( 'Could not create file directory!' ); } $plot->SetOutputFile( $filePath ); $plot->SetIsInline( true ); $data = array(); $totalVal = $totalCount = $n = 0; // Define the data using the DB rows list($res,$u,$maxC,$days) = $this->doQuery( $tag ); if( !$maxC ) { return false; } // Label spacing $int = intval( ceil($days/10) ); // 10 labels at most foreach( $res as $row ) { $totalVal += (int)$row->rfh_total; $totalCount += (int)$row->rfh_count; $dayCount = (real)$row->rfh_count; if( !$row->rfh_count ) { continue; // bad data } // Nudge values up by 1 $dayAve = 1 + (real)$row->rfh_total/(real)$row->rfh_count; $cumAve = 1 + (real)$totalVal/(real)$totalCount; $year = intval( substr( $row->rfh_date, 0, 4 ) ); $month = intval( substr( $row->rfh_date, 4, 2 ) ); $day = intval( substr( $row->rfh_date, 6, 2 ) ); # Fill in days with no votes to keep spacing even if( isset($lastDate) ) { $dayGap = wfTimestamp(TS_UNIX,$row->rfh_date) - wfTimestamp(TS_UNIX,$lastDate); $x = intval( $dayGap/86400 ); # Day gaps... for( $x; $x > 1; --$x ) { $data[] = array("",$lastDAve,$lastRAve,0); $n++; } } $n++; # Label point? if( $n >= $int || !count($data) ) { $p = ($days > 31) ? "{$month}-".substr( $year, 2, 2 ) : "{$month}/{$day}"; $n = 0; } else { $p = ""; } $data[] = array( $p, $dayAve, $cumAve, $dayCount ); $lastDate = $row->rfh_date; $lastDAve = $dayAve; $lastRAve = $cumAve; } // Minimum sample size if( count($data) < 2 ) { return false; } // Re-scale voter count to fit to graph $this->dScale = ceil($maxC/5); // Cache the scale value to memory $key = wfMemcKey( 'feedback', 'scale', $this->page->getArticleId(), $this->period ); $wgMemc->set( $key, $this->dScale, 7*24*3600 ); // Fit to [0,4] foreach( $data as $x => $dataRow ) { $data[$x][3] = $dataRow[3]/$this->dScale; } $plot->SetDataValues($data); $plot->SetPointShapes( array('dot','dot','dot') ); $plot->setPointSizes( array(1,1,4) ); $plot->SetDataColors( array('blue','green','red') ); $plot->SetLineStyles( array('solid','solid','solid') ); $plot->SetBackgroundColor('#F8F8F8'); // Turn off X axis ticks and labels because they get in the way: $plot->SetXTickLabelPos('none'); $plot->SetXTickPos('none'); $plot->SetYTickIncrement( .5 ); // Set plot area $plot->SetPlotAreaWorld( 0, 0, null, 5 ); // Show total number of votes $plot->SetLegend( array("#{$totalCount}") ); // Draw it! $plot->DrawGraph(); return true; }