Nuage de point de différentes couleurs avec Google charts (scatter)

Résolu
monoski Messages postés 132 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 13 mai 2013 - 11 juin 2010 à 12:32
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 - 12 juin 2010 à 15:31
Voilà j'évolue avec un graphique établi grâce au scatter charts de google.

Voici le code de base que j'utilise :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link rel="stylesheet" media="screen" type="text/css" href="css/style.css" />
    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">
      google.load("visualization", "1", {packages:["corechart"]});
      google.setOnLoadCallback(drawChart);
      function drawChart() {

        var data = new google.visualization.DataTable();
        data.addColumn('number', 'Abscisses');
        data.addColumn('number', 'Ordonnées');

<?php 

include 'include/bdd.php';
$recup2 = mysql_query("SELECT posx,posy FROM elfik_user WHERE race='demon'") or die(mysql_error());
$num_row = mysql_num_rows($recup2);
$recup3 = mysql_query("SELECT posx,posy FROM elfik_user WHERE race='ange'") or die(mysql_error());
$num_row2 = mysql_num_rows($recup3);
$num = $num_row + $num_row2;
$I=0;$I<=$num - 1;?>
data.addRows(<?php echo $num;?>);

<?php	 
while($fetch2 = mysql_fetch_assoc($recup2))
{
?>
data.setValue(<?php echo $I;?>, 0, <?php echo $fetch2['posx'];?>);//première série de coordonnées
data.setValue(<?php echo $I;?>, 1, <?php echo $fetch2['posy'];?>);
<?php
$I++;
};
?>
data.addRows(<?php echo $num;?>);

<?php	 
while($fetch3 = mysql_fetch_assoc($recup3))
{
?>
data.setValue(<?php echo $I;?>, 0, <?php echo $fetch3['posx'];?>);//deuxième série de coordonnées
data.setValue(<?php echo $I;?>, 1, <?php echo $fetch3['posy'];?>);
<?php

$I++;
};
?>

           
        var chart = new google.visualization.ScatterChart(document.getElementById('chart_div'));
        chart.draw(data, {width: 1300, height: 1000,
                          title: 'carte du monde',
                          hAxis: {title: 'Abscisses', minValue: -200, maxValue: 200},
                          vAxis: {title: 'Ordonnées', minValue: -200, maxValue: 200},
                          legend: 'none',
  pointSize : '3',
  colors: ['blue','#000000'] // couleur des points


                         });
      }

    </script>
  </head>
  
   <SCRIPT LANGUAGE="JavaScript" SRC="script/menu.js"></SCRIPT>
    


  
</html>


Et j'aimerai beaucoup que la seconde série de coordonnées (cf commentaires dans le code) fasse apparaître des points bleus sur le graphique alors que la première partie de coordonnées fasse apparaitre des points noir.

J'ai tenté de différentes manière d'obtenir ce résultat mais ce fut un échec dans les deux cas.

Si quelqu'un connait un peu le fonctionnement de google scatter charts je suis preneur :p

10 réponses

monoski Messages postés 132 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 13 mai 2013 1
12 juin 2010 à 15:13
Hier soir la main de Dieu a recollé les jointure de mon cervaux (oui j'ai pas de neurones) :


<?php
while($fetch2 = mysql_fetch_assoc($recup2))
{
?>
data.addRow([<?php echo $fetch2['posx'];?>, <?php echo $fetch2['posy'];?>, null]);


<?php

};


?>
<?php
while($fetch3 = mysql_fetch_assoc($recup3))
{
?>
data.addRow([<?php echo $fetch3['posx'];?>, null, <?php echo $fetch3['posy'];?>]);


<?php

};


?>


Basta :p
3
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
11 juin 2010 à 19:11
Bonjour,
je ne te serai pas d'un grand secours, mais j'ai retrouvé ce lien que je me suis toujours juré d'aller inspecter...

;O)
0
monoski Messages postés 132 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 13 mai 2013 1
11 juin 2010 à 19:35
Merci de ton aide,
Je connais déjà cet élément des tutoriaux google, le problème c'est qu'il n'y a pas d'établissement de dataSet.value, ça passe par une formule mathématique dans le dataaddrow :


for (var i = 0; i < 500; ++i) {
data.addRow([Math.sin(i / 5) * 0.25, Math.cos(i / 25), null])
}
for (var i = 0; i < 500; i++) {
data.addRow([Math.sin(i / 25), null, Math.cos(i / 10) * 0.5]);
}


Moi je désire passer par le dataset value, ou alors si tu peux m'aider à intégrer mes données dans le data.addRow je suis tout ouïe !
0
monoski Messages postés 132 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 13 mai 2013 1
12 juin 2010 à 02:01
Snif :'(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
monoski Messages postés 132 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 13 mai 2013 1
12 juin 2010 à 02:33
Tant pis pas grave je suis passé à autre chose ^^

Bonne journée !
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
12 juin 2010 à 10:27
Bonjour,
j'ai regardé rapidement et il semble que je ne comprenne pas bien le principe d'initialisation, il semblerait que ce soit ta façon d'initialiser qui coince...
si tu avais la version javascript de tes setValeur je pourrais peut être voir car je suis arrivé à saisir la méthode addRow, enfin il me semble !!!!!

;O)

PS : je suis abonner à semble, il semblerait!
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
12 juin 2010 à 14:54
Re...
ma balade matinale a visiblement été profitable et il en ressort que la méthode setValue n'est visiblement pas adaptée si les séries ont une valeur en X significative, tracé de courbe par exemple, dans ce cas il est préférable de passer par la méthode addRow.
Je te mets ci dessous le bout de code qui m'a permis toutes ces déductions, et qui du coup te permet d'affecter une couleur aux données sachant que la première, colonne, correspond à l'index des data...
google.load('visualization', '1', {packages: ['corechart']});
//------------------
function drawChart(){
  var data = new google.visualization.DataTable();
  //-- Creation des colonnes avec une pour l'axe X
  data.addColumn('number', 'Index en X');
  data.addColumn('number', 'Serie #1');
  data.addColumn('number', 'Serie #2');

  //-- des donnees pour test
  var T_Serie1 = [[8,12],[4,6],[11,14],[4,5],[3,5],[6,18]];
  var T_Serie2 = [[10,11],[11,12],[12,13],[13,14],[14,15],[15,16],[16,17]];

  //---------------------------------------
  // setValue(rowIndex, colIndex, value)
  // rowIndex = index de la valeur
  // colIndex = valeur en X depend de la serie
  // value    = valeur en Y
  //---------------------------------------
  //-- Serie #1
  var NbRows = T_Serie1.length;
  var Col = 1;
  //-- Creation de la ligne de data
  data.addRows( NbRows);
  //-- Creation des data
  for( var iRow = 0; iRow < NbRows; iRow++){
    data.setValue( iRow,   0, T_Serie1[iRow][0]);
    data.setValue( iRow, Col, T_Serie1[iRow][1]);
  }
  //-- Serie #2
  NbRows = T_Serie2.length;
  var Col = 2;
  //-- Creation de la ligne de data
  data.addRows( NbRows);
  //-- Creation des data
  for( var iRow = 0; iRow < NbRows; iRow++){
    //-- ecrase valeurs precedantes !!!!!!!!!!!!!
    data.setValue( iRow,   0, T_Serie2[iRow][0]);
    data.setValue( iRow, Col, T_Serie2[iRow][1]);
  }

  var chart = new google.visualization.ScatterChart(
  document.getElementById('chart_div'));
  chart.draw(data, {
    colors : ['#008000','#000080'],
    hAxis: {title: 'Abscisses', minValue: -0, maxValue:20},
    vAxis: {title: 'Ordonnees', minValue: -0, maxValue:20}
  });
}
google.setOnLoadCallback(drawChart);

Le seul BEMOL, c'est que je suis sur de rien, pas encore été voir leur doc en anglais...
;O)
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
12 juin 2010 à 15:04
Me..e, j'ai pas mis la méthode addRow
//-----------------//
// methode addRows //
//-----------------//
  var NbRows = T_Serie1.length;
  for( var iRow = 0; iRow < NbRows; ++iRow) {
   data.addRow([T_Serie1[iRow][0], T_Serie1[iRow][1], null])
  }
  
  NbRows = T_Serie2.length;
  for( var iRow = 0; iRow < NbRows; ++iRow) {
   data.addRow([T_Serie2[iRow][0], null, T_Serie2[iRow][1]])
  }

essaies les deux est tu verras que le graphique n'a rien à voir, mais le soucis COULEUR n'est plus...
;O)
0
monoski Messages postés 132 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 13 mai 2013 1
12 juin 2010 à 15:13
En tout cas merci pour ton aide, très sympas de t'être plongé sur mon problème :)
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
12 juin 2010 à 15:31
OK, donc c'est bien la méthode addRows la mieux adaptée à ton problème...

PS : penses a mettre ta réponse en réponse acceptée elle pourrait aider d'autres personnes.
;O)
0
Rejoignez-nous