Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Images > JpGraph
JpGraph Forum d'entraide pour la bibliothèque JpGraph permettant de manipuler des images en PHP. Avant de poster -> tutoriels JpGraph
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/08/2011, 11h16   #1
Invité régulier
 
Homme
Inscription : août 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 15
Points : 6
Points : 6
Par défaut Remplissage couleur entre deux courbes

Bonjour,
je me sert habituellement de jpgraph pour réaliser des graphiques pour mon site web météo (exemple : http://meteo.mezieres.free.fr/statannee.php?a=2011).
Je voudrais creer un graphique montrant les écarts de températures par rapport à la normale comme on peut le voir ici :http://www.cpc.ncep.noaa.gov/product...n07434_1yr.gif.

J'arrive à creer ma courbe de moyenne et ma courbe de normale.
J'aimerais pouvoir remplir avec une couleur la différence entre ces deux courbes.
J'ai regarder du côté de la doc, mais à part add_area je ne vois pas grand chose ni d'exemples sur le net.
Sur quel piste dois-je m'orienter ? Est-ce réalisable ?

Merci d'avance pour toutes ces questions.

Tintin
Tintin87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 13h15   #2
Membre régulier
 
Avatar de ypcman
 
Homme Yves
Responsable en conduite du changement
Inscription : janvier 2011
Messages : 63
Détails du profil
Informations personnelles :
Nom : Homme Yves
Localisation : France

Informations professionnelles :
Activité : Responsable en conduite du changement
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : janvier 2011
Messages : 63
Points : 73
Points : 73
Par défaut Axe d'algo à creuser

Bonjour.
Manifestement, ta question n'a pas trouvé de réponse simple et effectivement, à ma connaissance, la librairie JpGraph ne fournit pas nativement cette fonctionnalité.
Je te conseille de créer 2 courbes à partir des données de base : l'une comportant les valeurs supérieures à la moyenne, l'autre les valeurs inférieures. Pour cela, une boucle foreach qui teste val_normal-val_moyen et qui incrémente en fonction du résultat 2 tableaux de valeurs $tab_val_sup[] et $tab_val_inf[].
Ensuite, tu utilises le type de graphe accumulé AccLinePlot() avec les 3 courbes (inf, moy, sup) en utilisant les trois couleurs blanc, rouge et bleu.
Bon courage
ypcman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2011, 17h40   #3
Invité régulier
 
Homme
Inscription : août 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 15
Points : 6
Points : 6
Bonjour,
merci pour ton aide ypcman, mais entre temps j'ai beaucoup cogité et j'ai enfin trouver la réponse aujourd'hui.
Voici comment faire :
1)Définir ses courbes :deux courbe moyenne ($courbetm et $courbetm1) et deux courbes normales -j'expliquerai plus tard- ($courbetn et $courbetn1 identiques).

2)Calculer la différence entre la la moyenne et la normale :
Code :
1
2
3
4
5
6
7
 
foreach($ydatacourbetm as $cle1 => $valeur)
{
	$difference[$cle1]=$ydatacourbetm[$cle1]-$ydatacourbetn[$cle1];
 
 
	}
Array $différence :
[0] => -2.1
[1] => -3
[2] => -5
[3] => -5.4
[4] => -1.6
[5] => 4.3
[6] => 8.2
[7] => 8.4
[8] => 0.9
[9] => -3.3
[10] => 2.7
[11] => 4.6
[12] => 7.3
[13] => 6.6
[14] => 2.9
[15] => 2.4
[16] => 2.9


3)Calculer quels sont les clés des valeurs négatives et positives :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
foreach($difference as $key2 => $valeur2)
{
	if($valeur2<0)
		{
			$diff['neg'][]=$key2;
 
			}
 
	else {
 
			$diff['pos'][]=$key2;
 
			}
 
}
Array $diff['neg'] :
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 9
[6] => 18
[7] => 19
[8] => 20
[9] => 21
[10] => 22
[11] => 23
[12] => 24
[13] => 25
[14] => 26
[15] => 27
[16] => 28
[17] => 29
[18] => 30
[19] => 31



3)Calculer les débuts et fins de chaines des valeurs négatives par exemple :

Code :
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
 
foreach($diff['neg'] as $key3 => $valeur3)
 
{
	$key4=$key3+1;
 
	if($key3==1) {$pos['neg']['debut'][]=0;}
 
	//valeur différente de 1 si cassure par exemple 0-1-2-3-6-18-19
	elseif($diff['neg'][$key4]-$diff['neg'][$key3] != 1)
 
			{
				$pos['neg']['fin'][]=$valeur3 ;
 
 
 
 
				$pos['neg']['debut'][]=$diff['neg'][$key4];
 
 
 
 
				}
 
 
 
 
 
	}

Array $pos['neg']['debut']
[0] => 0
[1] => 9
[2] => 18
[3] =>


Array $pos['neg']['fin']
[0] => 4
[1] => 9
[2] => 31


4)On utilise une boucle for avec Addarea :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
$countpos=count($pos['neg']['fin']);
$countpos1=count($pos['neg']['fin'])-1;
 
for($i=0;$i<$countpos;$i++) {
 
 
$courbetn->AddArea($pos['neg']['debut'][$i],$pos['neg']['fin'][$i],LP_AREA_FILLED,"blue"); //couleur bleue sous la moyenne
$courbetm->AddArea($pos['neg']['debut'][$i],$pos['neg']['fin'][$i],LP_AREA_FILLED,"white"); //remplissage de blanc sous la normale
 
 
 
}
for($i=0;$i<$countpos1;$i++) {
 
$j=$i+1;
//on prend des intervalles différents restant
$courbetm->AddArea($pos['neg']['fin'][$i],$pos['neg']['debut'][$j],LP_AREA_FILLED,"red"); //remplissage de rouge sous la moyenne
$courbetn1->AddArea($pos['neg']['fin'][$i],$pos['neg']['debut'][$j],LP_AREA_FILLED,"white"); //remplissage de blanc sous la normale
 
 
}
5)Ajouter les courbes dans cet ordre

Code :
1
2
3
4
 $graph2->Add($courbetn);
  $graph2->Add($courbetm);
  $graph2->Add($courbetn1); //cette courbe recouvre en blanc une deuxième fois.
 $graph2->Add($courbetm1); //cette courbe recouvre le blanc par la moyenne.
Bon courage pour la lecture !

Exemple de courbe générée :
Tintin87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h55.


 
 
 
 
Partenaires

Hébergement Web