Toon posts:

[ALG] Bar graph berekening

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben zoals sommige hier weten bezig met een script, hiervoor wil ik een graph gaan maken maar ik kan niet op de juiste wiskundige berekening komen.

Stel ik heb een array (PHP) met X waardes, als het er meer dan Y zijn dan split ik deze zodat het max Y zijn. De waardes die ik binnekrijg kunnen vanalles bevatten, hardeschijfgebruikdiagram, netwerkgebruikdiagram, etc. In dit geval ga ik even uit van temperaturen die schommelen tussen de 38 en 49 graden.

Ik wil een graph maken die horizontaal of vertikaal laat zien welke temp het is. Dit werkt allemaal perfect, echter wil ik nou iets meer ;)

PHP:
1
2
3
4
5
$a = array(39,42,38,39,41,42,45,46,48,49);
sort($a);
$laagste = $a[0];
asort($a);
$hoogste = $a[0];


De hoogste waarde die ik hierdoor terugkrijg moet altijd de hoogste/langste "bar" zijn.
Ik had zelf al even gekeken, maar ik kan me geen manier bedenken waarop ik de hoogte harmonisch krijg. Ik zat eerst te denken aan persentages, echter krijg je dan een totaal van iets en dan klopt de data niet (denk ik).

@ 4VAlien:
Bedankt, ik kende die functie nog niet.

[ Voor 4% gewijzigd door Verwijderd op 02-03-2004 03:28 ]


  • 4VAlien
  • Registratie: November 2000
  • Laatst online: 26-05 14:22

4VAlien

Intarweb!

www.php.net/max

onlangs zelf een grafiek klasse gemaakt , die zelf de assen opmaakt etc..
http://mat018102.student..../TargetFinder/graphs/doc/ <-documentatie
http://mat018102.student..../source.php?file=core.php <- source

[ Voor 89% gewijzigd door 4VAlien op 02-03-2004 03:29 ]


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 20:58
Je zult de hoogste gelijk moeten stellen aan 100%.
Dus als je zegt: 49=100% zul je bij 48 dit moeten doen: 48/49*100.

Verwijderd

- vraag verkeerd gelezen - :X

[ Voor 94% gewijzigd door Verwijderd op 02-03-2004 14:22 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
Wat bedoel je met een 'harmonische' hoogte? En wil je de nullijn in je grafiek meenemen? Als het je gaat om relatieve schommelingen in temperatuur tussen 30 en 40 graden, dan is het waarschijnlijk niet zo interessant om de nullijn mee te nemen, aangezien alle waarden daar toch ruim boven liggen. Soms kan het echter wel handig zijn om 'm mee te nemen om de verschillen tussen waardes in perspectief te plaatsen. Het is dus vooral de vraag wat je precies wil.

Verwijderd

Topicstarter
Wat ik bedoel met "harmonische" hoogte is dat ik de laagste waarde als 0 lijn wil gebruiken. Echter hoe bereken ik het zo dat de rest van de waardes die er tussenin zitten wel netjes blijven. Zeker gezien de nullijn van -50 tot +150 kan zijn.

Is deze gang van zaken te doen of mis ik nog iets?
PHP:
1
2
3
4
5
6
7
8
$a = array(-50,20,25,29,51,48);
$maxhoogte = 50;
foreach ($a as $val) {
  $nulpnt = $val - min($a);
  $hoogte = floor($nulpnt / max($a) * 100) / 100 * $maxhoogte;
  //$hoogte = floor($nulpnt / max($a) * 100);
  echo $hoogte;
}


Dit zit toch aardig in de richting vind ik, echter de maximale hoogte klopt dus nog niet. Ik hou hiermee geen rekening met een door de user op te geven hoogte. En kloppen de maximale hoogtes dus niet (percentage dat een balk mag zijn). Als ik de 2e regel gebruik krijg ik andere output maar dan neem ik de maxhoogte niet mee.


Afbeeldingslocatie: http://dosje.homeip.net/got/graph-01.phpAfbeeldingslocatie: http://dosje.homeip.net/got/graph-02.php
met de code zoals
hij boven is aangegeven
met de geremde code

De bovenstaande images gebruiken de volgende array
PHP:
1
$data = array(26,27,28,29,30,25,50,15,10,12);

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

:?
Dat is toch gewoon een kwestie van het bepalen van de laagste en hoogste meetwaarden: het verschil hiertussen is het domein dat je gaat onderverdelen in het aantal pixels. Zeg dat je grafiek h pixels hoog wordt, dan

ymin = 0
ymax = h

Aangezien je h pixels hebt, en het verschil in meetwaarden max-min is, is elke meet-unit dus h/(max-min) pixels. Vergeet niet dat je pas bij min begint te tellen, dus een meetwaarde van min zelf is eigenlijk 0 meet-units en daarom ook 0 * h/(max-min) pixels hoog

Voor een willekeurige meting, x, is het aantal pixels dan: yx = (x - min) * h / (max-min)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1