Page 1 sur 1
[..] Histogramme tableau 2d
Posté : mar. 13 janv. 2015 18:11
par jcaspar
B

onjour à tous !
Je souhaiterais créer un histogramme d'un tableau 2D
la fonction Array1DToHistogram semble ne pas le permettre ?
Existerait il un UDF qui le permette ou un autre moyen ?
En vous remerciant pour vos conseils
Jean-Marc
Re: [..] Histogramme tableau 2d
Posté : mar. 13 janv. 2015 22:48
par jguinch
Perso, je comprends pas quel résultat tu attends...
Re: [..] Histogramme tableau 2d
Posté : mer. 14 janv. 2015 14:16
par mikell
Re: [..] Histogramme tableau 2d
Posté : mer. 14 janv. 2015 16:20
par jcaspar
La réponse précédente me convient mais mon programme n'est pas encore finalisé .....
donc j'ai mis le précédent sujet en résolu et je poserais les autres questions dans de nouveaux sujets
Pour ce qui est de l'histogramme j'aurais voulu pouvoir utiliser les données du précédent sujet et en réaliser un
histogramme mais comme il s'agit d'un tableau 2D à priori cela ne semble pas possible ...
Jean-Marc
Re: [..] Histogramme tableau 2d
Posté : mer. 14 janv. 2015 17:48
par orax
D'après ce que j'ai compris tu as un tableau avec plusieurs colonnes donc tu souhaites avoir un histogramme comme dans cet exemple :
http://www.docexcel.com/histogramme-sous-excel-2308
Les colonnes devront donc être regroupées ensemble.
Re: [..] Histogramme tableau 2d
Posté : mer. 14 janv. 2015 18:50
par jcaspar
Tout à fait !
mais je ne vois pas comment procéder avec la fonction native array1d to histogramm
Merci pour vos conseils
Jean-Marc
Re: [..] Histogramme tableau 2d
Posté : mer. 14 janv. 2015 19:10
par walkson
Bonsoir,
En utilisant _Array1DToHistogram () on peut obtenir un array 2D comme ceci
► Afficher le texte
Code : Tout sélectionner
#include <Array.au3>
Local $aNEW[] = ["toto", -80, -49, -44, 80, 100, 8, 7, 6, 5, 4, 3, 2, 1]
Local $aArray1 = _Array1DToHistogram($aNEW, 125)
Local $bNEW[] = ["tata", 20, 50, -44, 72, -100, 80, 7, 60, 5, 4, 30, 2, 1]
Local $aArray2 = _Array1DToHistogram($bNEW, 125)
$nColonne = 2
$nLigne = UBound($aArray1,1)
Local $aArrayTT[$nLigne][$nColonne]
For $i = 0 To $nLigne - 1
$aArrayTT[$i][0] = $aArray1[$i]
$aArrayTT[$i][1] = $aArray2[$i]
Next
_ArrayDisplay($aArrayTT, "_ArrayToHistogram")
Dans le principe, c'est simple mais pour automatiser toute une saisie,

mais c'est faisable...
Re: [..] Histogramme tableau 2d
Posté : jeu. 15 janv. 2015 12:25
par jcaspar
G

énial merci beaucoup !
c'est exactement ce que je souhaitais obtenir.
encore une petite question peux on changer les couleurs utilisées dans l'histogramme ?
exemple si la valeur inférieur à 10 = rouge, si entre 10 et 15 =vert et si > 17 bleu
ce serait encore plus parlant ....
Bon si ce n'est pas possible c'est déjà très bien comme cela !

Re: [..] Histogramme tableau 2d
Posté : jeu. 15 janv. 2015 13:29
par jguinch
Pour ça, il faut que tu créés une fonction équivalente à _ArrayDisplay qui te permette de mettre de la couleur
Re: [..] Histogramme tableau 2d
Posté : jeu. 15 janv. 2015 15:26
par jcaspar
Le code natif de la fonction histogramme est le suivant ...
donc l'idée est d'ajouter un paramètre couleur mais comment indiquer dans ma fonction
d'utiliser cette couleur ?
Si je comprends bien je peux modifier la fonction native à ma guise , mais m'est il possible
de l'appeler et de n'en modifier qu'une partie ?
Merci beaucoup pour vos explications et conseils
Jean-Marc
► Afficher le texte
Code : Tout sélectionner
Func _Array1DToHistogram($aArray, $iSizing = 100)
If UBound($aArray, 0) > 1 Then Return SetError(1, 0, "")
$iSizing = $iSizing * 8
Local $t, $n, $iMin = 0, $iMax = 0, $iOffset = 0
For $i = 0 To UBound($aArray) - 1
$t = $aArray[$i]
$t = IsNumber($t) ? Round($t) : 0
If $t < $iMin Then $iMin = $t
If $t > $iMax Then $iMax = $t
Next
Local $iRange = Int(Round(($iMax - $iMin) / 8)) * 8
Local $iSpaceRatio = 4
For $i = 0 To UBound($aArray) - 1
$t = $aArray[$i]
If $t Then
$n = Abs(Round(($iSizing * $t) / $iRange) / 8)
$aArray[$i] = ""
If $t > 0 Then
If $iMin Then
$iOffset = Int(Abs(Round(($iSizing * $iMin) / $iRange) / 8) / 8 * $iSpaceRatio)
$aArray[$i] = __Array_StringRepeat(ChrW(0x20), $iOffset)
EndIf
Else
If $iMin <> $t Then
$iOffset = Int(Abs(Round(($iSizing * ($t - $iMin)) / $iRange) / 8) / 8 * $iSpaceRatio)
$aArray[$i] = __Array_StringRepeat(ChrW(0x20), $iOffset)
EndIf
EndIf
$aArray[$i] &= __Array_StringRepeat(ChrW(0x2588), Int($n / 8))
$n = Mod($n, 8)
If $n > 0 Then $aArray[$i] &= ChrW(0x2588 + 8 - $n)
$aArray[$i] &= ' ' & $t
Else
$aArray[$i] = ""
EndIf
Next
Return $aArray
EndFunc ;==>_Array1DToHistogram
Re: [..] Histogramme tableau 2d
Posté : jeu. 15 janv. 2015 16:06
par jguinch
C'est _ArrayDisplay qui affiche le tableau, pas _Array1DToHistogram.
Il faut créer une GUI avec une listview qui t'affiche des couleurs différentes en fonction des valeurs.