Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP-ympyrädiagrammi

Sivun loppuun

Antti Laaksonen [18.06.2002 16:02:41]

#

Tämä PHP-skripti luo melko näyttävän ympyrädiagrammin halutuista tiedoista, jotka määritetään muuttujiin skriptin alussa. Jotta skripti toimisi, on serverillä oltava GD-library, jonka versio on oltava vähintään 2.0.

Skripti toiminnassaan: https://www.ohjelmointiputka.net/testit/piirakka.php

<?php

//kuvaajan tiedot
$otsikko="Ilman koostumus";
$arvo[0][0]=78;
$arvo[0][1]="typpi";
$arvo[1][0]=20;
$arvo[1][1]="happi";
$arvo[2][0]=0.9;
$arvo[2][1]="argon";
$arvo[3][0]=0.1;
$arvo[3][1]="muut";
$yksikko="%";

//kuvan alustaminen
$leveys=400;$korkeus=230;
header ("Content-type: image/png");
$im = @ImageCreate ($leveys, $korkeus)
    or die ("GD-kirjaston käyttäminen ei onnistu!");
$valkoinen = ImageColorAllocate ($im, 255, 255, 255);
$musta=ImageColorAllocate ($im, 0, 0, 0);


//arvojen yhteismäärä ja värien määritys
for ($i=0;$i<count($arvo);$i++)
  {
  $yht=$yht+$arvo[$i][0];
  $arvo[$i][2]=ImageColorAllocate ($im, $i*60,($i+1)*60,($i+2)*60);
  }

//kehykset
ImageRectangle($im,1,1,$leveys-1,$korkeus-1,$musta);
ImageRectangle($im,$leveys-150,40,$leveys-10,
40+count($arvo)*(ImageFontHeight(2)+4),$musta);

//otsikko
$opituus=ImageFontWidth(5)*strlen($otsikko);
$okohta=$leveys/2-$opituus/2;
ImageString($im,5,$okohta,5,$otsikko,$musta);

//kuvion piirtäminen
$vkulma=0;
for ($i=0;$i<count($arvo);$i++)
  {
  ImageFilledRectangle($im,$leveys-145,43+$i*(ImageFontHeight(2)+4),
$leveys-138,50+$i*(ImageFontHeight(2)+4),$arvo[$i][2]);
  ImageString($im,2,$leveys-135,40+$i*(ImageFontHeight(2)+4),
$arvo[$i][1]." (".$arvo[$i][0].$yksikko.")",$musta);
  $kulma=($arvo[$i][0]/$yht)*360;
  ImageFilledArc($im,120,120,180,180,$vkulma,
$vkulma+$kulma,$arvo[$i][2],IMG_ARC_PIE);
  $vkulma=$kulma+$vkulma;
  }
ImageArc($im,120,120,180,180,0,360,$musta);

//kuva PNG-muotoon
ImagePNG ($im);
?>

E.M.P [19.06.2002 18:01:20]

#

Johan pomppas

snakari [19.06.2002 19:38:06]

#

Hienoo työtä!

zeimi [19.06.2002 20:15:08]

#

aaargh, miten joku voi osata tällaista?

Veltto [19.06.2002 20:38:49]

#

Helposti tollasen tekee mutta vaikeeta se on

Veltto [19.06.2002 20:39:26]

#

Siis mitä v*ttua mä selitin...
Olen hiljaa.

Jaakko [19.06.2002 21:09:59]

#

hienoa työtä, antti!

Antti Laaksonen [19.06.2002 21:51:57]

#

"Helposti tollasen tekee mutta vaikeeta se on"

Hyvä huomautus, Veltto :)

HtH [19.06.2002 23:29:56]

#

Taisi veltto tarkoittaa(?) että se on tehdä helppoa, mutta pitää tehdä paljon työtä...?

Veltto [19.06.2002 23:45:57]

#

Mä en tiiä ees ite että mitä mä tarkotin

(nimetön) [22.06.2002 19:16:44]

#

Tohon loppuun on vielä hyvä laittaa imagedestroy($im); funktio.

T.M. [16.11.2002 17:30:10]

#

*byääh* mbnetissä ei ole tuota GD-library:ä =(

makeuu [21.11.2003 17:17:09]

#

ei niin, eikä MySql:llää, eikä php:tä, eikä asp:tä, eikä cgi:tä...
Kaikki olis kovia sanoja

dera [30.01.2004 14:37:51]

#

Wow, Tää on hieno!

dera [11.02.2004 17:55:51]

#

T.M. Mulla ainakin toimii mbnetissä GD...

dera [26.04.2004 09:35:02]

#

ja php kyl on!

jideko [22.01.2005 08:06:41]

#

Olen yrittanyt saada printattua noitten lohkojen nimen sen lohkon keskikohtaan mutta en saa millaan onnistumaan.
Pistan tahan surkean yrityksen. Olisi loistavaa jos joku osaisi auttaa. Tuo koodi siis on tuossa for:issa
Niin ja nykyinen kokeilu on osoitteessa http://koti.mbnet.fi/jideko/jenkki/piirakka.php

$pkulma=90-$kulma/2;
if ($pkulma<0){$pkulma=$pkulma=360;}


$x_piste=55+ (25*-cos(deg2rad($pkulma)));
$y_piste=55+ (25*-sin(deg2rad($pkulma)));

$numeron_leveys=ImageFontWidth(5)*strlen($arvo[$i][1]);
$numeron_korkeus=ImageFontHeight(5);
$numeron_x =$numeron_leveys/2;
$numeron_y =$numeron_korkeus/2;

$kohta_x=$x_piste-$numeron_x;
$kohta_y=$y_piste-$numeron_y;

ImageString($im,5,$kohta_x,$kohta_y,$arvo[$i][1],$musta);

ja anteeksi sekava tekstini. Olen vasynyt, koittakaa ymmartaa.

SysRq868 [19.03.2005 17:34:09]

#

Eikös se ole oikealta nimeltään sektoridiagrammi? ;)

moptim [22.04.2007 11:33:35]

#

Aika makea.

Olli [21.02.2009 13:05:25]

#

Tein (muokkasin) vähä erilaisen version.

Tiedot annetaan query_stringiin eli esim. piirakka.php?Otsikko|Yksikkö|10/Testi|10/Testi 2

Mitä mieltä olette tästä?

<?php
$teksti = $_SERVER['QUERY_STRING'];

// Korvataan oikeiksi merkeiksi
$mista = array('%E4', '%C4', '%F6', '%D6', '%E5', '%C5', '%20');
$mihin = array('ä', 'Ä', 'ö', 'Ö', 'å', 'Å', ' ');
$teksti = str_replace($mista, $mihin, $teksti);

// Tallennetaan luetteloon
$arvo = explode('|', $teksti);
$otsikko = $arvo[0];

$lukum = count($arvo);
for($i=2;$i<$lukum;$i++){
$pala = explode('/', $arvo[$i]);
$arvo[$i] = array();
$arvo[$i][0] = $pala[0];
$arvo[$i][1] = $pala[1];
}

$yksikko = $arvo[1];

// Kuvan alustaminen
$leveys  = 400;
$korkeus = 230;

header("Content-type: image/png");

$err = "Palvelin ei tue GD-kirjastoa.";
$im = @imagecreate($leveys, $korkeus) or die($err);

$valkoinen = imagecolorallocate($im, 255, 255, 255);
$musta = imagecolorallocate($im, 0, 0, 0);


// Arvojen yhteismäärä ja värien määritys
for ($i=2;$i<$lukum;$i++){
$yht = $yht + $arvo[$i][0];
$arvo[$i][2] = imagecolorallocate($im, $i*60,($i+1)*60,($i+2)*60);
}

// Kehykset
$lukuk = $lukum - 2;
imagerectangle($im, 1, 1, $leveys-1, $korkeus-1, $musta);
imagerectangle($im, $leveys-150, 40, $leveys-10,
40+$lukuk*(imagefontheight(2)+4), $musta);

// Otsikko
$opituus = imagefontwidth(5)*strlen($otsikko);
$okohta = $leveys/2-$opituus/2;
imagestring($im, 5, $okohta, 5, $otsikko, $musta);

// Kuvion piirtäminen
$vkulma=0;
for($i=2;$i<$lukum;$i++){
$ja = $i - 2;
imagefilledrectangle($im, $leveys-145, 43+$ja*(imagefontheight(2)+4), $leveys-138, 50+$ja*(imagefontheight(2)+4), $arvo[$i][2]);
imagestring($im, 2, $leveys-135, 40+$ja*(ImageFontHeight(2)+4), $arvo[$i][1]." (".$arvo[$i][0].$yksikko.")", $musta);
$kulma = ($arvo[$i][0]/$yht)*360;
imagefilledarc($im, 120, 120, 180, 180, $vkulma, $vkulma+$kulma, $arvo[$i][2], IMG_ARC_PIE);
$vkulma = $kulma + $vkulma;
}
imagearc($im, 120, 120, 180, 180, 0, 360, $musta);

// Kuva PNG-muotoon
imagepng($im);
imagedestroy($im);
?>

(yritin myös selkeyttää koodia)

nosegoblin [26.12.2009 18:28:48]

#

Koitin tuota Ollin versiota soveltaa omaan webbisivuviritelmääni, mutta diagrammi menee sekaisin jos arvona on nolla. Osaako joku viisaampi neuvoa miten tuota voisi muokata siten, että nolla-arvoa ei oteta huomioon kuvaajaa piirrettäessä?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta