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 :

[JpGraph] Remplissage couleur entre deux courbes


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Par défaut [JpGraph] 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

  2. #2
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    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

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
     
    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 : 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
     
    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 : 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
     
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Calcul d'erreur entre deux courbes
    Par louftansa dans le forum MATLAB
    Réponses: 14
    Dernier message: 03/06/2009, 15h10
  2. Connaitre le decalage temporel entre deux courbes
    Par kis93 dans le forum MATLAB
    Réponses: 8
    Dernier message: 23/01/2009, 16h58
  3. [patch][fill] Coloriage entre deux courbes
    Par kis93 dans le forum MATLAB
    Réponses: 6
    Dernier message: 02/10/2008, 22h01
  4. Différence entre deux courbes
    Par malokox dans le forum Signal
    Réponses: 2
    Dernier message: 24/06/2008, 10h15
  5. [VBA E]Colorier l'espace entre deux courbes
    Par conconbrr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/07/2006, 09h19

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