2010-05-11 2 views
8

Ich konstruiere ein Liniendiagramm in PHP. Ich habe den Max-Wert des Liniendiagramms auf den Maximalwert meiner Sammlung von Elementen gesetzt, was jedoch dazu führte, dass der Graph weniger lesbar wurde. Sie können die höchste Zeile im Diagramm nicht sehen, wenn sie sich mit dem oberen Teil schneidet. Also, was ich brauche, ist im Grunde eine Formel, die eine Reihe von Zahlen zu nehmen und zu berechnen, was der logische max Wert im Liniendiagramm .. sein sollte, so einige BeispielePHP gegeben eine Reihe von beliebigen Zahlen, wie kann ich einen logischen maximalen Wert auf einem Liniendiagramm wählen?

3500 
250 
10049 
45394 
434 
312 
     Max value on line graph should probably be 50000 

493 
412 
194 
783 
457 
344 
    max value on line graph would ideally be 1000 

545 
649 
6854 
5485 
11545 
     In this case, 12000 makes sense as max value 

so etwas so einfach wie Rundung nach oben zum nächsten Tausendstel könnte funktionieren, aber ich würde es brauchen, um es schrittweise zu erhöhen, wenn die Zahlen größer werden. (50000 statt 46.000 im ersten Beispiel) Das Maximum, das diese Zahlen jemals erreichen werden, ist ungefähr eine Million.

Alle Empfehlungen wäre sehr dankbar, danke.

Hier ist, was ich ließ sich auf, ich danke Ihnen allen für Ihre Kommentare:

private function FigureMaxValue($array) 
    { 
     $highestNumber = max($array); 
     if ($highestNumber == 0) return 0; 
     $highestNumber = $highestNumber * 1.1; 
     (float)$highestNumber = round((float)$highestNumber, 0); 
     $maxValue = ceil((integer)$highestNumber/100) * 100; 
     return $maxValue; 
    } 
+0

Was sollte der Maximalwert sein, wenn Sie im ersten Beispiel ein 50001 anstelle von 45 394 haben? – IVlad

+0

Welche PHP-Version? – erisco

+0

@IVlad: Ich würde 53,000ish sagen? (Hauptsache ist eine leicht teilbare ganze Zahl wie 53000 nicht 53500 oder 53585) @erisco: PHP 5 – stormist

Antwort

1

ich tun würde, nur eine Größenordnung über dem höchsten Wert, wie $highestValue * 1.05 oder so etwas. Sie werden immer noch mit dem Problem der Ausreißer IE konfrontiert werden -

4 
5 
12 
2 
1 
4 
4266 

In diesem Fall Sie die Auflösung auf den niedrigeren Zahlen verlieren würde. Sie können die Standardabweichung für jedes Element testen, wenn Sie Ausreißer verwerfen möchten.

2
1. $numbers = array(3500, 250, 10049, 45394, 434, 312) 
2. $highestNumber = max($numbers) 
3. $n = 10^(strlen($highestNumber) - 1) 
4. $highestNumber = $highestNumber/$n 
5. $newMax = ceil($n) 
6. $newMax = $newMax * $n 
+0

Ich bekomme "falsche Parameter für die Runde" – stormist

+0

die PHP_ROUND_HALF_UP paramaters wurde in PHP 5.3.0 eingeführt. Welche PHP Version verwendest du? –

+0

Benutze stattdessen ceil(), ich habe meine Antwort oben bearbeitet; –