IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[Artichow] Modifier la taille de la légende en fonction des données que l'on souhaite mettre dedans


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 43
    Points
    43
    Par défaut [Artichow] Modifier la taille de la légende en fonction des données que l'on souhaite mettre dedans
    Bonjour à tous,


    je souhaite créer des diagrammes en camembert automatiquement en fonction des données qui se trouve dans une base MySQL.

    Pour cela pas de soucis, j'ai réussi à faire tous les diagrammes.

    Ce qui me dérange c'est que pour la légende je récupère les données provenant de ma table et ainsi toutes n'ont pas forcément la même taille

    Est-il possible que la taille de la légende varie en fonction du contenu ? En gros existe-t-il un moyen de modifier la taille en fonction de ce qui va être mis dedans ?
    Sinon est-il possible de mettre les lignes de légende sur plusieurs lignes si elles sont trop grandes pour tenir dans le cadre de légende ?

    Je ne sais pas si je me suis assez bien exprimé, j'espère que vous avez compris mon problème.
    Sinon demandez moi des infos, je vous les donnerai.

    J'ai grand besoin de votre aide, merci d'avance pour vos réponses

  2. #2
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    est ce que tu pourrais nous montrer un petit exemple de code avec des textes de différentes tailles
    GNAP !

  3. #3
    Membre du Club
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 43
    Points
    43
    Par défaut
    Voilà, donc j'ai en réalité 2 pages :
    - une qui crée le camembert : camembert.php
    - et une page pour afficher les diagrammes : stats_qpr.php

    Voilà la page de création du camembert : camembert.php située dans le dossier Diagrammes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    <?php
     
    	// On vérifie que les données à afficher sur le graphique existent
    	if((isset($_GET['values']) === FALSE)
    		OR (isset($_GET['legend']) === FALSE))
    	{
    		exit;
    	}
     
    	// On récupère les valeurs à afficher sur le graphique et on les désérialize si besoin
    	$data = @unserialize($_GET['values']);
    	$dataLegend = @unserialize($_GET['legend']);
     
    	// On vérifie que les données passées en GET sont correctes
    	if((is_array($data) === FALSE)
    		OR (is_array($dataLegend) === FALSE))
    	{
    		exit;
    	}
     
    	// La classe Pie est celle utilisée pour dessiner les camemberts.
    	require_once('../Artichow/Pie.class.php');
     
    	// Instanciation...
    	$graph = new Graph(350, 200);
     
    	// ... ajout d'une ombre portée...
    	$graph->shadow->setPosition(Shadow::RIGHT_BOTTOM);
    	$graph->shadow->setSize(4);
    	// ... et d'un fond.
    	$graph->setBackgroundGradient(new LinearGradient(new Color(240, 240, 240, 0),new White,0));
     
    	// On crée un camembert avec les données reçues
    	$pie = new Pie(array_values($data), Pie::EARTH);
    	// Affiche les pourcentages avec une précision d'un dixième.
    	$pie->setLabelPrecision(1);
    	// On met une valeur en dessous de laquelle le label ne sera pas affiché sur le diagramme, ici il est de 2%
    	$pie->setLabelMinimum(1.5);
     
    	// Labels sur le camembert
    	$pie->setLabelPosition(-40);
    	$pie->label->setFont(new Tuffy(9));
    	$pie->label->setBackgroundColor(new White(55));
    	$pie->label->border->setColor(new White(55));
     
    	// Ajout de la légende
    	$pie->setLegend(array_values($dataLegend));
    	// Taille de la légende
    	// Repositionnement de la légende
    	$pie->legend->setPosition(8.5/5, .50);
    	// Décalage du camembert sur la gauche et vers le bas
    	$pie->setCenter(1/4, 1/2);
    	// Redimensionnement du camembert, taille relative à l'objet Graph le contenant.
    	$pie->setSize(3/5, 4/5);
    	// Ajout d'un petit effet 3D; la valeur est donnée en pixel.
    	$pie->set3D(20);
     
    	// Ajout du camembert au graphe
    	$graph->add($pie);
    	$graph->draw();
     
    ?>
    et celle qui affiche les camemberts : stats_qpr.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
    	<head>
    		<title>Liste des incidents graves et majeurs</title>
    		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    		<link rel="stylesheet" media="screen" type="text/css" href="../design/design_stats_fenetreQPR.css" />
    	</head>
     
    	<body>
     
    		<?php
    		// Connection à la base de données
    		mysql_connect("localhost", "root", "");
    		mysql_select_db("bdd_evenementsmajeurs_backbonerbci");
     
    		// Fonction qui renvoie l'année et le mois en cours
    		function aujourdhui()
    		{
    			$anneeAuj = date("Y", time());
    			$periodeAuj = array("01-01", "12-31");
    			return array($anneeAuj, $periodeAuj);
    		}
     
    		// Fonction qui permet l'affichage de l'impact pondéré sur les diagrammes
    		function afficherImpactPondere($nbSec)
    		{
    			$h = floor($nbSec / 3600);
    			$resteSec = fmod($nbSec, 3600);
    			$min = round($resteSec / 60);
    			$sec = fmod($resteSec , 60);
    			if ($min <10)
    			{
    				if($sec < 10)
    				{
    					return $h . ':0' . $min . ':0' . $sec;
    				}
    				else
    				{
    					return $h . ':0' . $min . ':' . $sec;
    				}
    			}
    			else
    			{
    				if($sec < 10)
    				{
    					return $h . ':' . $min . ':0' . $sec;
    				}
    				else
    				{
    					return $h . ':' . $min . ':' . $sec;
    				}
    			}
    		}
     
    		// Fonction pour calculer un pourcentage
    		function cacul_pourcentage($nombre,$total,$pourcentage)
    		{ 
    			$resultat = ($nombre/$total) * $pourcentage;
    			return round($resultat,1); // Arrondi la valeur
    		} 
     
    		// Fonction qui permet de calculer le nombre de tickets dans la base
    		// ainsi que la somme total des impacts pondérés
    		function calcul_total($aujourdhui)
    		{ 
    			$nbInc = mysql_query("SELECT COUNT(*) Id_ticket FROM qpr WHERE Traite='OUI'
    								AND (`Date_debut` BETWEEN '".$aujourdhui[0]."-".$aujourdhui[1][0]."' AND '".$aujourdhui[0]."-".$aujourdhui[1][1]."')"); 
    			$impact = mysql_query("SELECT SUM(Impact_pondere) Impact_pondere FROM qpr 
    								WHERE Traite='OUI' AND (`Date_debut` BETWEEN '".$aujourdhui[0]."-".$aujourdhui[1][0]."' AND '".$aujourdhui[0]."-".$aujourdhui[1][1]."')");
    			$totalInc = mysql_fetch_object($nbInc);
    			$totalImp = mysql_fetch_object($impact);
    			return $totalImp->Impact_pondere;
    		}
     
    		// Fonction qui fait les calculs nécessaires pour le diagramme
    		// représentant la distribution des impacts selon les fonctions réseaux touchées
    		function FctRes($aujourdhui)
    		{
    			$queryFctRes = "SELECT SUM(Impact_pondere) , Fonction_reseau FROM qpr
    							WHERE Traite='OUI' AND (`Date_debut` BETWEEN '".$aujourdhui[0]."-".$aujourdhui[1][0]."' AND '".$aujourdhui[0]."-".$aujourdhui[1][1]."')
    							GROUP BY Fonction_reseau
    							ORDER BY SUM(Impact_pondere) ASC";
    			$resultFctRes = mysql_query($queryFctRes) or die(mysql_error());
    			$i=0;
    			while($rowFctRes = mysql_fetch_array($resultFctRes))
    			{
    				$valuesFctRes[$i] = $rowFctRes['SUM(Impact_pondere)'];
    				$legendFctRes[$i] = $rowFctRes['Fonction_reseau']." : ".cacul_pourcentage($valuesFctRes[$i],calcul_total($aujourdhui),100)." %";
    				$i++;
    			}
    			if(empty($valuesFctRes))
    			{
    				echo "Il n'y a pas de données pour cette période";
    			}
    			else
    			{
    				echo "<img src='Diagrammes/camembert.php?values=".urlencode(serialize($valuesFctRes))."
    					   &legend=".urlencode(serialize($legendFctRes))."'
    					   alt='Mon graphique'/>";
    			}
    		}
     
     
    		// Fonction qui fait les calculs nécessaires pour le diagramme
    		// représentant la répartition des impacts des incidents selon AVP
    		function AVP($aujourdhui)
    		{
    			$queryAVP = "SELECT SUM(`Impact_pondere`) , `AVP` FROM qpr
    						WHERE Traite='OUI' 
    						AND (`Date_debut` BETWEEN '".$aujourdhui[0]."-".$aujourdhui[1][0]."' AND '".$aujourdhui[0]."-".$aujourdhui[1][1]."')
    						GROUP BY AVP
    						ORDER BY SUM(`Impact_pondere`) ASC";
    			$resultAVP = mysql_query($queryAVP) or die(mysql_error());
    			$i=0;
    			while($rowAVP = mysql_fetch_array($resultAVP))
    			{
    				$valuesAVP[$i] = $rowAVP['SUM(`Impact_pondere`)'];
    				$legendAVP[$i] = $rowAVP['AVP']." : ".cacul_pourcentage($valuesAVP[$i],calcul_total($aujourdhui),100)." %";
    				$i++;
    			}
    			if(empty($valuesAVP))
    			{
    				echo "Il n'y a pas de données pour cette période";
    			}
    			else
    			{
    				echo "<img src='Diagrammes/camembert.php?values=".urlencode(serialize($valuesAVP))."
    					   &legend=".urlencode(serialize($legendAVP))."'
    					   alt='Mon graphique'/>";
    			}
    		}
     
    		// Fonction qui fait les calculs nécessaires pour le diagramme
    		// représentant la répartition des impacts des incidents selon AVP hors Cas Isolé
    		function AVPhorsCasIsole($aujourdhui)
    		{
    			$queryAVPhorsCasIsole = "SELECT SUM(`Impact_pondere`) , `AVP` FROM qpr
    						WHERE AVP != 'Cas Isolé' AND Traite='OUI' 
    						AND (`Date_debut` BETWEEN '".$aujourdhui[0]."-".$aujourdhui[1][0]."' AND '".$aujourdhui[0]."-".$aujourdhui[1][1]."')
    						GROUP BY AVP
    						ORDER BY SUM(`Impact_pondere`) ASC";
    			$resultAVPhorsCasIsole = mysql_query($queryAVPhorsCasIsole) or die(mysql_error());
    			$sqlTotal = "SELECT SUM(`Impact_pondere`) Impact_pondere FROM qpr 
    						WHERE Traite='OUI'AND AVP != 'Cas Isolé' 
    						AND (`Date_debut` BETWEEN '".$aujourdhui[0]."-".$aujourdhui[1][0]."' AND '".$aujourdhui[0]."-".$aujourdhui[1][1]."')";
    			$queryTotal = mysql_query($sqlTotal) or die(mysql_error());
    			$total = mysql_fetch_object($queryTotal);
    			$i=0;
    			while($rowAVPhorsCasIsole = mysql_fetch_array($resultAVPhorsCasIsole))
    			{
    				$valuesAVPhorsCasIsole[$i] = $rowAVPhorsCasIsole['SUM(`Impact_pondere`)'];
    				$legendAVPhorsCasIsole[$i] = $rowAVPhorsCasIsole['AVP']." : ".cacul_pourcentage($valuesAVPhorsCasIsole[$i],$total->Impact_pondere,100)." %";
    				$i++;
    			}
    			if(empty($valuesAVPhorsCasIsole))
    			{
    				echo "Il n'y a pas de données pour cette période";
    			}
    			else
    			{
    				echo "<img src='Diagrammes/camembert.php?values=".urlencode(serialize($valuesAVPhorsCasIsole))."
    					   &legend=".urlencode(serialize($legendAVPhorsCasIsole))."'
    					   alt='Mon graphique'/>";
    			}
    		}
     
     
    		// Fonction qui permet d'afficher les diagrammes
    		function afficherDiagrammes($aujourdhui)
    		{
    			$totalImp = calcul_total($aujourdhui);?>
     
    		<!-- On affiche le diagramme pour l'impact selon les fonctions réseaux touchées -->
    			<div id="Fct Res">
    				<h2> Impacts selon les fonctions réseaux touchées </h2>
    				<?php echo FctRes($aujourdhui); ?>
    			</div>
     
    		<!-- On affiche le diagramme pour l'impact selon les AVPs connus -->
    			<div id="AVP">
    				<h2> Calcul impact par AVPs connus</h2>
    				<?php echo AVP($aujourdhui); ?>
    			</div>
     
    		<!-- On affiche le diagramme pour l'impact selon les AVPs connus hors Cas Isolé -->
    			<div id="AVPhorsCasIsole">
    				<h2> Calcul impact par AVPs connus hors cas isolé</h2>
    				<?php echo AVPhorsCasIsole($aujourdhui); ?>
    			</div>
     
    			<?php
    		}
     
    		// On récupère l'année et le mois d'aujourd'hui
    		// Ce qui va permettre de sélectionner par défaut l'année d'affichage des résultats et aussi les critères de recherche
    		$aujourdhui = aujourdhui();
    		?>
     
    		<div class="corpsPage">
    		<?php
     
    			// On vérifie si l'utilisateur a effectué une recherche ou NON
    			if($_GET['recherche'] == 0) // Pas de recherche, on affiche par défaut les statistiques de l'année en cours
    			{
    				afficherDiagrammes($aujourdhui);
    			}
    			else
    			{
    				$periode = @unserialize($_GET['periode']);
    				$aujourdhui = array($_GET['annee'], $periode);
    				afficherDiagrammes($aujourdhui);
    			}
     
    		?>
    		</div> <!-- corpsPage -->
     
    		<?php
    		mysql_close(); // On n'oublie pas de fermer la connexion à MySQL
    		?>
     
    	</body>
    </html>
    Comme je l'ai dit je n'ai aucun problème pour créer mes camemberts.

    Le problème c'est que je souhaite adapté la taille de la légende aux données récupérées en fonction de leur taille
    ou sinon agrandir l'image en conséquence mais je ne vois pas trop comment faire

    pour le premier diagramme j'ai ça :


    pour les 2 autres la légende vient sur le camemberts

  4. #4
    Membre du Club
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 43
    Points
    43

  5. #5
    Membre du Club
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 43
    Points
    43
    Par défaut
    Quelqu'un pourrait-il m'aider ?

    Une idée de solution assez simple à mettre en oeuvre ?

  6. #6
    Membre du Club
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 43
    Points
    43
    Par défaut
    Personne n'a jamais rencontré ce problème ??

    Avez-vous quand même une idée de comment gérer ce problème ? Parce que là je ne vois pas trop comment faire sachant que la légende est importée directement de mes tables MySQL ....

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/03/2011, 09h12
  2. modifier la taille de la légende
    Par helaaa dans le forum MATLAB
    Réponses: 1
    Dernier message: 10/09/2009, 08h25
  3. Modifier la taille d'un élément en fonction de la resolution
    Par kstou2001 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/12/2007, 23h38
  4. Réponses: 4
    Dernier message: 27/07/2007, 10h51
  5. Réponses: 11
    Dernier message: 23/11/2006, 15h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo