Avatar billede dank Nybegynder
01. januar 2003 - 22:04 Der er 15 kommentarer og
1 løsning

Lave en søjlediagram

Hey.. jeg har f.eks.

$var1 = 20
$var2 = 40
$var3 = 35

Er der nogen der kender en metode til at lave et lille søjlediagram eller udskrive nogle søjler på en pæn og nydelig måde?

system: Linux, php 4.1.2 med gd(png)
Avatar billede gonza.dk Nybegynder
01. januar 2003 - 22:09 #1
du kan jo lege lidt med tabeller... så sætte height='$var1' også videre.... ved ikk om du forstår hvad jeg mener?
Avatar billede nicklasb Nybegynder
01. januar 2003 - 22:20 #2
Det vil da være meget lettere at lave med div ..

<?
echo "
<div style=\"background-color: #000000; color: #ffffff; width: $var1;\">$var1</div>
<div style=\"background-color: #000000; color: #ffffff; width: $var2;\">$var2</div>
<div style=\"background-color: #000000; color: #ffffff; width: $var3;\">$var3</div>
";
?>

Så skriver den også tallet oven på ... Denne ligger ned.. Men du kan vel selv lige rette den til, hvis den skal stå op med noget float: left, float: right og height: $var[nummer]

/Nicklas B.
Avatar billede nicklasb Nybegynder
01. januar 2003 - 22:34 #3
har lige lavet et ekstemt hurtigt eksempel, så du kan se, hvor enkelt let det er.. Og hvor lidt kode der skal til :)
http://www.bornstein.dk/diagram.php
Avatar billede nicklasb Nybegynder
01. januar 2003 - 22:38 #4
og så har jeg også lige sat den lodrette på.. :)
Avatar billede dank Nybegynder
01. januar 2003 - 23:12 #5
nicklasb > Det er ret smart. Men hvis du ens tal er ret høje.. Hvad gør man så? Dividerer tallet med 100 først eller sådan noget?

Nogen idéer?

Men dit forslag er rigtigt godt synes jeg.
Avatar billede gonza.dk Nybegynder
02. januar 2003 - 00:12 #6
nicklasb > Den var smart, den havde jeg ikke tænkt på ;o) Vil bruge den selv, hvis jeg skal lave søjlediagrammer på et tidsounkt.

dank > ja du kan godt dividere med eksempelvis 100. Men du skal huske at dividere med det samme tal på alle dine søjler. :o)

Mvh.
Gonza
Avatar billede Noone Nybegynder
02. januar 2003 - 00:20 #7
Hvad med den her klasse? http://ykcee.sourceforge.net/

Virker fino for mig...
Avatar billede nicklasb Nybegynder
02. januar 2003 - 10:13 #8
ja.. det vil da nok være en smart måde at gøre det på.. Og hvis du prøver at kigge på min kan du måske også gennemskue at det faktisk er det jeg har gjodt ;)
Jeg har bare ganget i stedet..
Det du ser der nu ser således ud:

---------------kode---------------
<?
$een = "10";
$var1 = 20;
$var2 = 40;
$var3 = 35;
$var1dia = $var1*$een;
$var2dia = $var2*$een;
$var3dia = $var3*$een;
echo "
<div style=\"background-color: #000000; color: #ffffff; width: $var1dia; border: solid 1px #ffffff;\">$var1</div>
<div style=\"background-color: #000000; color: #ffffff; width: $var2dia; border: solid 1px #ffffff;\">$var2</div>
<div style=\"background-color: #000000; color: #ffffff; width: $var3dia; border: solid 1px #ffffff;\">$var3</div>
<p></p>
";

echo "
<div style=\"float: left; background-color: #000000; color: #ffffff; height: $var1dia; border: solid 1px #ffffff;\">$var1</div>
<div style=\"float: left; background-color: #000000; color: #ffffff; height: $var2dia; border: solid 1px #ffffff;\">$var2</div>
<div style=\"float: left; background-color: #000000; color: #ffffff; height: $var3dia; border: solid 1px #ffffff;\">$var3</div>
";
?>
--------------/kode---------------

Så ændre du bare på $een... Og den vil så ændre søjlernes længder.. Meget meget simpelt.. Og hvis det så er fordi dine tal er alt for høje, kan du jo bare gange det med noget under nul.. Altså fx 0,1.. Det vil svare til at dividere det med 10.. Så du skal slet ikke ændre i det, eller noget.. Du kan bare huske, at komma skal skrives med et punktum (.) i de fleste php-versioner.. Så kører den bare..

Du kunne jo også lave en script der ser hvor meget den højeste værdi er.. Og så ganger dem alle med en eller anden, anden værdi for at få en præcis maxlængde.. Det var også en mulighed.. Så er der SLET ikke noget du selv skal rette.. :)

Håber du kan bruge det tik noget

/Nicklas B.
Avatar billede nicklasb Nybegynder
02. januar 2003 - 13:04 #9
prøv at se den nu.. http://www.bornstein.dk/diagram.php
Nu har jeg lavet det jeg talte om at DU kunne lave.. hehe.. ;)
Nu vælger man bare hvad max-størrelsen på pindene må være.. Og den regner så de andre ud fra den længeste.. Lige nu har jeg sat max-længden på 567..
Og den længeste vil så blive 567..
Avatar billede nicklasb Nybegynder
02. januar 2003 - 13:05 #10
(tallene i paranteserne viser bare hvor lang den er, hvis du skulle være i tvivl.. ;)
Avatar billede nicklasb Nybegynder
02. januar 2003 - 13:55 #11
og her kan du så se den, som du talte om, hvis tallet var meget højt.. Det eneste jeg har ændret er $maxlenght; http://www.bornstein.dk/diagram02.php

du kan også prøve at se denne.. http://www.bornstein.dk/diagram03.php?maxlenght=500
der kan du så bare skifte 500 ud, og se hvordan det virker..
Avatar billede dank Nybegynder
02. januar 2003 - 14:12 #12
tak for hjælpen. Det er godt nok en rigtig smart løsning :)
Avatar billede nicklasb Nybegynder
02. januar 2003 - 14:22 #13
hov.. kunne da være du også lige skulle have koden ;)
den bliver nemlig ikke ved at ligge der hvor den gør nu :)

---------------kode---------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>Diagram</title>
<meta name="Generator" content="Stone's WebWriter 3">
</head>
<style>
body {
    background: #ffffff;
    margin-top: 5px;
    margin-right: 5px;
    margin-left: 5px;
    margin-bottom: 5px;
    text-align: left;
    font-family : tahoma;
    font-size: 11px;
}
</style>
<body>
<?
$var1 = 20;
$var2 = 40;
$var3 = 35;

$maxvar = max(intval($var1),intval($var2),intval($var3));
$varlenght = $maxvar/$maxlenght;

$var1dia = round($var1/$varlenght);
$var2dia = round($var2/$varlenght);
$var3dia = round($var3/$varlenght);

echo "Max-længde: <b>$maxlenght</b> px<p></p>";

echo "
<div style=\"background-color: #000000; color: #ffffff; width: $var1dia px; border: solid 1px #ffffff;\">$var1 ($var1dia)</div>
<div style=\"background-color: #000000; color: #ffffff; width: $var2dia px; border: solid 1px #ffffff;\">$var2 ($var2dia)</div>
<div style=\"background-color: #000000; color: #ffffff; width: $var3dia px; border: solid 1px #ffffff;\">$var3 ($var3dia)</div>
<p></p>
";

echo "
<div style=\"float: left; background-color: #000000; color: #ffffff; height: $var1dia px; border: solid 1px #ffffff;\">$var1</div>
<div style=\"float: left; background-color: #000000; color: #ffffff; height: $var2dia px; border: solid 1px #ffffff;\">$var2</div>
<div style=\"float: left; background-color: #000000; color: #ffffff; height: $var3dia px; border: solid 1px #ffffff;\">$var3</div>
";
?>

</body>
</html>
--------------/kode---------------
Avatar billede nicklasb Nybegynder
02. januar 2003 - 14:27 #14
og hvis du så vil være HELT sikker på at den aldig bliver for lang, fx ved at man skriver 500.6 som længde kan du skrive en:

$maxlenght = floor($maxlenght);

i starten af scriptet.. for da man ikke kan lave halve pixel, vil det smarteste jo så være at runde ned.. men det er også at gå op i meget små bagateller ;)
Avatar billede nicklasb Nybegynder
02. januar 2003 - 14:30 #15
dog kan man skrive 500.99999999999999 (14 9-taller)
Der vil den runde op til 500.. men det er så ligegyldigt.. hehe..
Avatar billede nicklasb Nybegynder
02. januar 2003 - 14:30 #16
501 even.. undskyld hvis der kommer en masse mail nu.. hehe..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester