JpGraph: Klassenerweiterung "ErrorPlotValues"
Hits: 1937
 
Dieses HowTo ist älter als ein Jahr.
Unter Umständen können die Angaben hier zu aktuellen System abweichen.
 
Der Server ist ein sun4u TI UltraSparc IIIi System auf gentoo Linux mit dem Kernel 2.6.20-gentoo-r6.
Die Version von PHP ist 5.2.8-pl0-gentoo, die Version von JpGraph ist 2.3.3.
 
Bewerten Sie das Script bei
php-resource.de


   
5 ist die beste Wertung
Bewerten Sie das Script bei
phparchiv.de


   
10 ist die beste Wertung
 
Leider erhielt ich vom Entwickler von JpGraph keine Antwort.
Daher mache ich den Code hier publik:
 
 
Die Klasse kann hier gedownloaded werden: jpGraph_Class_ErrorPlotValues.phps  (266)
 
 
<?
/*
 * a small class extension for displaying percentage or absolute values
 * inside ErrorPlots
 * by Hofmann R. Julian // 16. Januar 2009
 *

    # new ErrorPlotValues(
    #    [array like for normal ErrorPlot], 
    #    [xValues array like for normal ErrorPlot],
    #    [FALSE = percentage, TRUE = absolute values], 
    #    [width of the upper and lower line]
    # );

   Usage example:

    $errplot1 = new ErrorPlotValues($differenzIntern, FALSE, FALSE, 4);
    $errplot1->SetColor("gray");
    $errplot1->SetWeight(1);
    $errplot1->SetCenter();
    $errplot1->value->Show();
    $errplot1->value->HideZero();
    $errplot1->value->SetFormat("%d%%");
    $errplot1->SetValuePos("top", "right");
    $errplot1->SetValueFont(FF_VERDANA, FS_BOLD, 5);

 */

class ErrorPlotValues extends Plot {
    private 
$breite 0;
    private 
$absolut FALSE;
    private 
$valign "middle";
    private 
$halign "center";
    private 
$FontSize 5;

    function 
ErrorPlotValues(&$Ywerte$Xwerte FALSE$absolut FALSE
            
$breite 2) {
        
$this->Plot($Ywerte$Xwerte);
        
$this->numpoints /= 2;
        
$this->breite $breite;
        
$this->absolut $absolut;
    }
    function 
SetValuePos($valign "middle"$halign "center") {
        
$this->valign $valign;
        
$this->halign $halign;
    }
    function 
SetValueFont($font "FF_VERDANA"$style "FS_BOLD"$size 5) {
        
$this->value->SetFont($font$style$size);
        
$this->FontSize $size;
    }
    function 
Stroke($img$xscale$yscale) {
        
$numpoints count($this->coords[0]) / 2;
        
$img->SetColor($this->color);
        
$img->SetLineWeight($this->weight);

        if (isset(
$this->coords[1])) {
            if (
count($this->coords[1]) != $numpoints)
                
JpGraphError::RaiseL(2003count($this->coords[1]), $numpoints);
            else
                
$exist_x TRUE;
        } else
            
$exist_x FALSE;

        for (
$i 0$i $numpoints; ++$i) {
            
$x = ($exist_x) ? $this->coords[1][$i] : $i;

            if (!
is_numeric($x) || !is_numeric($this->coords[0][$i*2]) || 
                !
is_numeric($this->coords[0][$i*2+1]))
                    continue;

            
$wert = ($this->absolut == FALSE) ? 
                
$this->getProzent($this->coords[0][$i*2], $this->coords[0][$i*2+1]) : 
                
$this->getDifferenz($this->coords[0][$i*2], $this->coords[0][$i*2+1]);
            
$wertShown sprintf($this->value->format$wert);

            
$datenValpos_x $datenValpos_y NULL;
            
$datenpos_x $xscale->Translate($x);
            
$datenpos_val1 $yscale->Translate($this->coords[0][$i*2]);
            
$datenpos_val2 $yscale->Translate($this->coords[0][$i*2+1]);

            
$datenPosDiff $this->FontSize + ($this->value->margin 2) + 1;

            switch (
$this->halign) {
            case 
"right":
                
$datenValpos_x $datenpos_x $this->breite 
                    ((
strlen((string) $wertShown) * $this->FontSize) / 2);
            break;
            case 
"left":
                
$datenValpos_x $datenpos_x $this->breite 
                    ((
strlen((string) $wertShown) * $this->FontSize) / 2);
            break;
            case 
"center":
            default:
                
$datenValpos_x $datenpos_x;
            }
            switch (
$this->valign) {
            case 
"top":
                if (
$this->coords[0][$i*2] > 0)
                    
$datenValpos_y = ($datenpos_val2 $datenpos_val1) ? 
                        
$datenpos_val1 
                        (
$datenpos_val2 + ($datenPosDiff 2));
                else
                    
$datenValpos_y = ($datenpos_val1 $datenpos_val2) ?
                        
$datenpos_val2 :
                        (
$datenpos_val1 + ($datenPosDiff 2));
            break;
            case 
"bottom":
                if (
$this->coords[0][$i*2+1] > 0)
                    
$datenValpos_y = ($datenpos_val2 $datenpos_val1) ? 
                        (
$wert ? ($datenpos_val2 - ($datenPosDiff 2)) : 
                            
$datenpos_val2) : 
                        (
$wert ? ($datenpos_val1 - ($datenPosDiff 2)) : 
                            
$datenpos_val1);
                else
                    
$datenValpos_y = ($datenpos_val1 $datenpos_val2) ?
                        (
$wert ? ($datenpos_val1 - ($datenPosDiff 2)) : 
                            
$datenpos_val1) : 
                        (
$wert ? ($datenpos_val2 - ($datenPosDiff 2)) : 
                            
$datenpos_val2);
            break;
            case 
"middle":
            default:
                
$datenValpos_y = ($datenpos_val1 $datenpos_val2) / 2;
                
$datenValpos_y = ($wert 0) ? $datenValpos_y $datenPosDiff 
                    
$datenValpos_y $datenPosDiff;
            }

            
$img->Line($datenpos_x$datenpos_val1$datenpos_x$datenpos_val2);
            
$img->Line(
                
$datenpos_x $this->breite$datenpos_val1,
                
$datenpos_x $this->breite$datenpos_val1
            
);
            
$img->Line(
                
$datenpos_x $this->breite$datenpos_val2,
                
$datenpos_x $this->breite$datenpos_val2
            
);
            
$this->value->Stroke(
                
$img,
                
$wert,
                
$datenValpos_x
                
$datenValpos_y
            
);
        }
        return 
TRUE;
    }
    function 
getProzent($val1$val2) {
        if (
$val1 == 0)
            return 
0;
        return ((
$val2 $val1) * 100 $val1);
    }
    function 
getDifferenz($val1$val2) {
        return (
$val1 $val2);
    }
}
/*
 * end of class 
 */


function printAbsoluteValue($val) {
    return ((string) 
abs($val));
}
function 
printAbsoluteEuroValue($val) {
    return ((string) 
abs($val)." E");
}
function 
fehlerkostenGesamt($intern$extern$monat$legende$legende2
        
$datei) {
    
$graph = new Graph(800500"auto");
    
$graph->SetScale("textlin");
    
$graph->SetMargin(44365070);
    
$graph->SetMarginColor("#EBEBEB");
    
$graph->title->SetFont(FF_VERDANA,FS_BOLD9);
    
$graph->title->SetMargin(8);
    
$graph->title->SetColor("black");
    
$graph->title->Set("Fehlerkostenentwicklung der letzten 12 Monate");

    
$graph->xaxis->SetFont(FF_VERDANAFS_BOLD7);
    
$graph->yaxis->SetFont(FF_VERDANAFS_BOLD7);

    
$graph->yaxis->SetLabelMargin(20);
    
$graph->xaxis->SetLabelMargin(12);
    
$graph->xaxis->HideZeroLabel();
    
$graph->xaxis->SetPos("min");
    
$graph->xaxis->HideTicks();

    
$graph->xaxis->SetTickLabels($legende);

    
$graph->xgrid->Show(falsefalse);
    
$graph->ygrid->Show(truefalse);
    
$graph->ygrid->SetColor("#F4F4F4");
    
$graph->ygrid->SetWeight(1); 

    
$graph->yaxis->SetLabelAlign("center""center");

    
$graph->yaxis->SetColor("#D5552A");
    
$graph->yaxis->HideZeroLabel();
    
$graph->yaxis->HideLastTickLabel();
    
$graph->yaxis->HideFirstTickLabel();

    
$graph->legend->Pos(0.50.97"center""bottom");
    
$graph->legend->SetLayout(LEGEND_HOR);
    
$graph->legend->SetColor("darkblue");
    
$graph->legend->SetFont(FF_VERDANAFS_BOLD7);
    
$graph->legend->SetFillColor("white");
    
$graph->legend->SetShadow(FALSE);

    
$line1 = new PlotLine(HORIZONTAL0"#0D6D00"1);

    
$t1 = new Text("intern");
    
$t1->SetPos(0.9650.28);
    
$t1->SetOrientation(270);
    
$t1->SetFont(FF_VERDANAFS_BOLD9);

    
$t2 = new Text("extern");
    
$t2->SetPos(0.9650.60);
    
$t2->SetOrientation(270);
    
$t2->SetFont(FF_VERDANAFS_BOLD9);

    for (
$k 0$k count($intern); $k++) {
        for (
$z 0$z count($intern[$k]); $z++)
            
$gesamtIntern[$z] += $intern[$k][$z];
    }
    for (
$k 0$k count($extern); $k++) {
        for (
$z 0$z count($extern[$k]); $z++)
            
$gesamtExtern[$z] += $extern[$k][$z];
    }

    foreach (
$gesamtIntern as $index => $gesamt) {
        
$differenzIntern[] = $gesamtIntern[($index 1)];
        
$differenzIntern[] = $gesamtIntern[($index 1)];
    }
    foreach (
$gesamtExtern as $index => $gesamt) {
        
$differenzExtern[] = $gesamtExtern[($index 1)];
        
$differenzExtern[] = $gesamtExtern[($index 1)];
    }
    foreach (
$gesamtIntern as $value)
        if (
$max $value)
            
$max $value;
    foreach (
$gesamtExtern as $value)
        if (
$max abs($value))
            
$max abs($value);
    foreach (
$gesamtIntern as $index => $gesamt)
        if (
$index 2) {
            
$gesamtIntern[$index] = ($gesamtIntern[$index 1] + 
                
$gesamtIntern[$index 1]) / 2;
            
$valueIntern[$index] = $gesamtIntern[$index];
        } else
            
$valueIntern[$index] = 0;
    foreach (
$gesamtExtern as $index => $gesamt)
        if (
$index 2)
            
$gesamtExtern[$index] = ($gesamtExtern[$index 1] + 
                
$gesamtExtern[$index 1]) / 2;

    
$max += $max 20;

    
$uline1 = new PlotLine(HORIZONTAL$max"#0D6D00"0);
    
$lline1 = new PlotLine(HORIZONTAL$max"#0D6D00"0);

    
$bplot1 = new BarPlot($intern[0]);
    
$bplot1->SetFillColor("#E16E15");
    
$bplot2 = new BarPlot($intern[1]);
    
$bplot2->SetFillColor("#6F39ED");
    
$bplot3 = new BarPlot($intern[2]);
    
$bplot3->SetFillColor("#18A827");

    
$bplot4 = new BarPlot($extern[0]);
    
$bplot4->SetFillColor("#E16E15");
    
$bplot5 = new BarPlot($extern[1]);
    
$bplot5->SetFillColor("#6F39ED");
    
$bplot6 = new BarPlot($extern[2]);
    
$bplot6->SetFillColor("#18A827");
 
    
$errplot1 = new ErrorPlotValues($differenzInternFALSEFALSE4);
    
$errplot1->SetColor("gray");
    
$errplot1->SetValuePos("top""right");
    
$errplot1->SetWeight(1);
    
$errplot1->SetCenter();
    
$errplot1->SetValueFont(FF_VERDANAFS_BOLD5);
    
$errplot1->value->Show();
    
$errplot1->value->HideZero();
    
$errplot1->value->SetFormat("%d%%");

    
$errplot2 = new ErrorPlotValues($differenzExternFALSEFALSE4);
    
$errplot2->SetColor("gray");
    
$errplot2->SetValuePos("bottom""right");
    
$errplot2->SetWeight(1);
    
$errplot2->SetCenter();
    
$errplot2->SetValueFont(FF_VERDANAFS_BOLD5);
    
$errplot2->value->Show();
    
$errplot2->value->HideZero();
    
$errplot2->value->SetFormat("%d%%");

    
$lineplot1 = new LinePlot($gesamtIntern);
    
$lineplot1->SetFillColor("#D5552A@0.8");
    
$lineplot1->SetColor("#D5552A");
    
$lineplot1->SetWeight(0);

    
$lineplot2 = new LinePlot($gesamtExtern);
    
$lineplot2->SetFillColor("#769FEB@0.8");
    
$lineplot2->SetColor("#769FEB");
    
$lineplot2->SetWeight(0);

    
$abplot1 = new AccBarPlot(array($bplot1$bplot2$bplot3));
    
$abplot1->SetWidth(0.4);
    
$abplot1->SetAlign("right");
    
$abplot1->value->Show();
    
$abplot1->value->SetFont(FF_VERDANAFS_BOLD6);
    
$abplot1->value->SetColor("black");
    
$abplot1->value->SetFormat("%d E");
    
$abplot1->value->HideZero();
    
$abplot1->value->SetFormatCallback("printAbsoluteEuroValue");

    
$abplot2 = new AccBarPlot(array($bplot4$bplot5$bplot6));
    
$abplot2->SetWidth(0.4);
    
$abplot2->value->Show();
    
$abplot2->value->SetFont(FF_VERDANAFS_BOLD6);
    
$abplot2->value->SetColor("black");
    
$abplot2->value->SetFormat("%d E");
    
$abplot2->value->HideZero();
    
$abplot2->value->SetFormatCallback("printAbsoluteEuroValue");

    
$graph->Add($uline1);
    
$graph->Add($lline1);
    
$graph->Add($lineplot1);
    
$graph->Add($lineplot2);
    
$graph->Add($abplot1);
    
$graph->Add($abplot2);

    
$graph->Add($errplot1);
    
$graph->Add($errplot2);
    
    
$graph->Add($line1);
    
$graph->AddText($t1);
    
$graph->AddText($t2);

    
$graph->Stroke("include/tmp/jpgraph/{$datei}");
}
?>
 
[16. Januar 2009 - Hofmann R. Julian]
 
Bewertungen
 
Dieser Artikel ist:
Grund bzw. Bemerkung:
Geben Sie die angezeigte Zahl an (SpamSchutz):

Ich freue mich über jede Bewertung.
Zur Darstellung der Verbesserungsmöglichkeiten der HowTos und Anleitungen steht Ihnen das Feld "Bemerkung" zur Verfügung.
Leider häufen sich die Spam-Votes. Ich bitte um Verständnis.
Bewerten Sie bitte nur, wenn Sie die Anleitung auch gelesen haben. Vielen Dank.


 
bisherige Bewertung:
 
sehr hilfreich 0 0 %
hilfreich 0 0 %
nicht das, was ich gesucht habe 0 0 %
verbesserungswürdig 0 0 %
nicht ausreichend 0 0 %
wirklich nicht hilfreich 0 0 %
schlecht 0 0 %

bisherige Stimmen: 0.