[R] graphiques avancés
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

[R] graphiques avancés



  1. #1
    Loupsio

    [R] graphiques avancés


    ------

    Bonjour,
    J'aurai besoin de conseils de la part de personnes utilisant R régulièrement (je ne sais pas si ca ne serait pas mieux dans un des forums de sciences puisque R sert plus souvent aux scientifiques qu'au programmeur purs et durs, mais bon dans le doute...)

    je plot un graphe montrant une quantité Y par jour sur plusieurs années (voir image jointe), mais comme vous le voyez ce n'est que très peu lisible
    On voit que ça balance entre 5 et 11 au long des 3ans, mais on distingue peu les tendances.
    Je cherche donc à mieux visualiser les points qui sont rapprochés entre eux (en gros quand il y a une grande densité de point sur une surface donnée, ou dit autrement, à mieux mettre en évidence les endroit ou les points sont tellement proches que l'arrière plan blanc disparait et qu'on observe limite une droite bleue par fusion des points les uns sur les autres

    Pour cela je voudrai faire une sorte de heatmap, où, plus les points sont rapprochés : plus la couleur sera chaude, et moins ils y aura de points proche les uns des autres : plus la couleur sera froide
    Je ne sais pas si il y a un moyen simple de faire comprendre ça à R car la manière en mode "système D" serait super compliquée (regarder individuellement chaque point et voir si dans les jours proches de cette date (+/- 5 jours autour de chaque date), combien il y a de valeur Y qui sont proche )

    J'utilise pas souvent les packages genre ggplot qui sont un peu "fais ma tambouille sans que j'ai à comprendre que dalle" selon moi, alors qu'on peut quasiment tout faire soi même, même si c'est un peu plus long a coder, mais là je doute que je puisse faire ce que je veux sans un package
    Je doute même qu'un package type ggplot soit suffisant,
    si quelqu'un sait comment faire....
    Merci

    Nom : Rplot.png
Affichages : 151
Taille : 82,4 Ko

    -----
    Dernière modification par Loupsio ; 11/09/2016 à 13h58.

  2. #2
    pelkin

    Re : [R] graphiques avacés

    Alors déjà, l'utilisation de petites étoiles (qui sont si jolies dans le ciel) c'est franchement merdique, un point, c'est un point , autrement dit avant de faire joli il faut faire efficace.
    Les axes ainsi que leurs échelles peuvent être modifiés en fonction des résultats que l'on désire obtenir (et aussi de la lisibilité).
    Je suppose qu'il s'agit d'un graphe "nuage de points", ce qui n'est pas précisé (et il serait mieux de ne pas avoir une galaxie de nuage d'étoiles ... je sais je me répète).
    Pour le reste on suppose que la droite rouge est une droite de régression linéaire (faut bien supposer puisque rien n'est dit).
    Pour le reste, je ne comprends rien à votre charabia.
    Spécialisé en sadanthropomicrobitubulabibaquophtalmologie

  3. #3
    cherbe

    Re : [R] graphiques avacés

    Bonjour
    Colorier en fonction de la densité du nuage de points est, de mon point de vue, une fausse bonne idée. Certes le graphique sera plus joli et contiendra une information supplémentaire, mais cette information ne sera que visuelle donc inexploitable.
    Tu as outil pour exploiter ce genre d'information de manière visuelle aussi bien que quantitative, ce sont les boxplots ou "boites à moustache".
    Pour avoir de l'argent devant soi, il faut en mettre de côté ! (proverbe lorrain)

  4. #4
    Loupsio

    Re : [R] graphiques avacés

    Alors déjà, l'utilisation de petites étoiles (qui sont si jolies dans le ciel) c'est franchement merdique,
    Yep mais le petites étoiles merdiques comme tu dit, c'est ce que j'ai trouvé de mieux pour visualiser les points rapprochés, sinon ca donne ça par défaut (image 1 dans balise spoil), et "ça" niveau visualisation... c'est pire
    le point normal (pch=16) donne l'image 2 qui n'est pas meilleur niveau visualisation
    alors avant d'y aller agressif sur les motivation que tu supposent pousser quelqu'un a faire quelque chose, renseigne toi, ca t'évitera de dire de la merde , car ce n'est absolument pas dans un but esthétique, mais bien pour faire ressortir les tendances que j'avais opté pour les étoiles,
     Cliquez pour afficher

    Merci de le préciser mais je sais modifier les axes et echelles sur R c'est juste absolument pas ce que je cherche a faire, mais merci.

    pour la droite rouge je vois absolument pas pourquoi la mentionner puisqu'encore une fois ca n'a absolument rien a voir avec le problème,si on va par là, je peux aussi indiquer ce que représente l'axe des Y pendant qu'on y est, et la raison pour laquelle je cherche a faire ça, et ma date de naissance, mon code Wi-Fi ...


    Colorier en fonction de la densité du nuage de points est, de mon point de vue, une fausse bonne idée. Certes le graphique sera plus joli et contiendra une information supplémentaire, mais cette information ne sera que visuelle donc inexploitable.
    Merci cherbe, c'est justement ce que je souhaite avoir, quelque chose de visuel, avoir un niveau d'information supplémentaire dans le graphe en fonction du temps, pour exploiter les données, visualiser statistiquement en séparer été automne hier printemps .... et tout la partie stat c'est déjà fait, et dans le visuel, les boxplot ne correspondent pas à ce que je veux
    Dernière modification par Loupsio ; 11/09/2016 à 15h44.

  5. A voir en vidéo sur Futura
  6. #5
    Loupsio

    Re : [R] graphiques avacés

    Merci cherbe, c'est justement ce que je souhaite avoir, quelque chose de visuel, avoir un niveau d'information supplémentaire dans le graphe en fonction du temps, pour exploiter les données, visualiser statistiquement en séparer été automne hier printemps .... et tout la partie stat c'est déjà fait, et dans le visuel, les boxplot ne correspondent pas à ce que je veux
    J'ai écris un peu trop vite pour la deadline de correction de message, et je me rend compte que c'est illisible

    ""
    Merci cherbe, c'est justement ce que je souhaite avoir, quelque chose de visuel, avoir un niveau d'information supplémentaire dans le graphe en fonction du temps,
    Car pour ce qui est de l'exploitation des données, analyses statistiques et tout, c'est déjà fait,
    Mais pour montrer les données sous forme de graphique d'un seul regard, les boxplot ne correspondent pas à ce que je veux, il me faut un graphe en fonction du temps qui fasse ressortir la tendance (et donc la densité de point en fonction du temps)
    ""
    Dernière modification par Loupsio ; 11/09/2016 à 15h52.

  7. #6
    Dlzlogic

    Re : [R] graphiques avacés

    Bonjour,
    Si j'avais à faire ça, je ferais un quadrillage. Une simple lecture des données permettrait d'attribuer à chaque case un nombre correspondant au nombre de points qui s'y trouve. Toutes les données étant lues, il ne reste plus qu'à étalonner la palette de couleurs et enfin à dessiner les carrés.
    Je ne connais pas R, mais il devrait réussir à faire ça. En C/C++, ce serait facile.
    Bonne continuation.

  8. #7
    Loupsio

    Re : [R] graphiques avacés

    Salut Dlzlogic, le quadrillage est une bonne idée, après je ne sais pas si c'est faisable sur R,
    je sais qu'on peut ajouter un quadrillage en tant que parametre graphique, mais en tant que zone définie à appeler et colorier je ne sais pas. Mais il y a quelques lacunes a cette methode, par exemple si on admet que 1 point dans le carré = bleu ; 5 points = blancs et 10 points = rouge,
    s' il y a 10 points proches (zone donc qui devrait etre rouge) mais qu'ils tombent de part et d'autre d'une ligne de telle sorte qu'ils seront répartis dans deux cases adjacentes, ces deux cases seront blanches (5 points chacune) alors que plus loin si on a 7 points proche (pour une meme surface donnée) on aura moins de points dans cette sections (par rapport aux 10 qui étaient proches) mais la couleurs tirera vers le rouge car ils sont dans une même case.
    on aura donc des zones aux couleurs plus froides pour des densités finalement plus élevées

    Sinon dans le même genre que ce que tu propose j'avais pensé à passer par un vecteur qui contiendrait autant valeurs qu'il y a de points sur le graphe, et remplir ce vecteur en comptant le nombre de points a proximité de chaque point . La le nombre de point ne serait pas compté dans des cases issues d'un quadrillage fixe, mais dans des cases dont chacun de tes points est le centre

    Par exemple, pour le point du 15 janvier dont Y = 11, faire un truc du genre : la somme du nombre de points compris entre "11-3" et "11+3" parmi les points des dates comprises entre le 5 janvier au 25 janvier
    afin de prendre ce qui est proche de ce point a la fois en X et en Y, et ensuite faire la même chose pour le 16 janvier (entre 6 janvier et 26 janvier) puis l 17 janvier ...

    et à chaque itération de date, rentrer le code couleur auquel le point correspond en fonction du nombre de point qu'on aura trouve autour de lui comme cela

    Seulement ça ferai passer par une boucle avec 1093 itérations (3 ans = 1093 jours) surtout que R est fait pour éviter les boucles au maximum en travaillant directement sur le vecteur entier plutôt que itération par itération

    Mais ça me parait un peu fastidieux
    Dernière modification par Loupsio ; 11/09/2016 à 20h01.

  9. #8
    Dlzlogic

    Re : [R] graphiques avacés

    Bonsoir,
    Je me rends compte (et ce n'est qu'une confirmation) que ces nouveaux logiciels sont capable de résoudre des problèmes prévus, sinon il ne font que compliquer les choses.
    Je veux bien t'aider, faire un module pour réaliser cela, mais pour moi, un vecteur est un objet de géométrie, et si on est dans un contexte informatique, un segment orienté.
    L'intérêt de la méthode à laquelle je pense fournira un dégradé du bleu clair vers le rouge foncé, parfaitement lisible.
    Il y a une autre méthode qui consisterait à tracer des courbes de niveau, éventuellement avec coloration.

  10. #9
    Loupsio

    Re : [R] graphiques avacés

    Pour R un vecteur correspondrait à un tableau à une seule colonne (une liste en gros)
    D'ailleurs la définition que donne open classroom :
    Un vecteur est une liste d'éléments étant tous du même type.
    Un vecteur est une structure qui vous permettra donc de stocker plusieurs nombres dans une même variable

    (nombres ou caractères ou string, ou même des listes elles mêmes où chaque élément du vecteur sera lui même un vecteur)

    au moment du
    Code:
    plot(X,Y)
    si on a un vecteur nommé "maCouleur", et que ce vecteur est de même taille que le vecteur X (les 1094 dates) et le vecteur Y (les 1094 valeurs associées à chaque date), alors
    le point de coordonnées (X[1],Y[1]) aura la couleur maCouleur[1] et (X[n],Y[n]) aura la couleur maCouleur[n] juste par un
    Code:
    plot(X,Y,col=maCouleur)
    Le problème c'est que R préfère qu'on agisse sur un vecteur entier plutot que sur chacune de ses valeurs
    par exemple un vecteur nommé "chiffres" qu contient 10 éléments (1,2,3,4,5,6,7,8,9,10) si tu veux multiplier chaque valeurs par 2 , il suffit de faire :
    Code:
    chiffre=chiffre*2
    pour tout multiplier par deux,pas besoin de :
    Code:
    for (i in length(chiffre)) 
    {
    chiffre[i]=chiffre[i]*2
    }
    ce qui évite les boucles et augmente la rapidité de travail
    surtout dans les cas de boucles avec milliers d'itérations
    Mais dans mon cas je ne vois pas comment lui faire comprendre que (pour simplifier) maCouleur[i] doit être "bleu" si la somme de points compris a la fois entre X-n et X+n ET entre Y[i]-m et Y[i]+m est faible et que maCouleur[i] doit etre "rouge" si la somme de points compris a la fois entre X-n et X+n ET entre Y[i]-m et Y[i]+m est élevée.



    La méthode que tu propose est interessante aussi, mais je ne verrai même pas par ou commencer pour faire ça avec R
    Et ne risque-t-on pas d'avoir des cas de figure comme ceci :
     Cliquez pour afficher

    Les deux ronds de meme taille possèdent la meme quantité de points mais l'un est un carré coloré en bleu l'autre en rouge du à la répartition des points et du quadrillage
    Dernière modification par Loupsio ; 12/09/2016 à 00h28.

  11. #10
    Dlzlogic

    Re : [R] graphiques avancés

    Bonjour,
    Apparemment Open... est passé par là et a fait des dégâts.
    Bien-sûr, je sais ce que certains langages informatique appellent un vecteur. Je sais même que l'on peut trouver comme définition pour "tableau" : matrice qui peut avoir plusieurs dimensions.

    Pour votre problème, je suppose que votre exemple est guidé par la connaissance de votre étude. Ce n'est pas mon cas. D'après les images que j'ai pu voir, la méthode de quadrillage correspond bien au but recherché.
    Pour résumer, si c'est un exercice, je vous laisse vous débrouiller avec OCR, si vous avez besoin de cette représentation, vous pouvez m'envoyer vos données, je vous ferai un truc qui correspondra à votre hypothèse.
    Bonne journée.

  12. #11
    Loupsio

    Re : [R] graphiques avancés

    Je n'ai pas appris R par openClassroom, c'était juste pour voir une définition exact de vecteurs, en fait je n'ai pas appris R au sens propre, je connais les fonctions de bases de R en ayant fouillé par ci par là, lu quelques pdf etc pour traiter mes données à la fois pour les stat et les graphiques, et quand je cherche quelque chose d'un peu plus compliqué je me débrouille en programmant moi même ce que je veux puisque R permet quand même de faire pas mal de choses en programmation et que les bases sont très proches des autres langages pour les fonctions, les boucles les comparaisons if ...

    Ce n'est pas un exercice, mais comme on va surement encore m'ajouter de nouvelles données dans les mois a venir, du coup je prépare le script, mais il me manque des valeurs, c'est pour ca qu'avec R c'est pratique, je mettrait a jour au fur et à mesure, et comme je n'ai jamais fais de C/C++, si tu arrives a avoir ce que je veux, je ne pourrais pas m'en re-servir
    Je vais chercher quand même du côté quadrillage comment je pourrais faire ça avec R, peut être du côté de la fonction grid() , mais c'est surtout avoir des retours de la partie graphique afin de compter, que je me pose des questions,
    je vais voir par là et je repasserai en fonction de ce que ca donne
    Merci beaucoup,
    bonne journée

  13. #12
    Dlzlogic

    Re : [R] graphiques avancés

    Bonsoir,
    Sauf erreur de ma part, ce que tu veux faire n'est pas très difficile.
    Le contre-exemple que tu as montré ne tient pas la route, dans le sens où il suffit d'adapter la dimension des mailles à la finesse des résultats que l'on cherche.
    Si on sait manipuler des graphiques, et à mon avis c'est ce qui demande le plus d'investissement, alors le problème présent est sans difficulté. Bien-sûr, R propose des outils simple pour faire du graphisme.
    Je suppose que R ne permet pas seulement de dessiner les points. En l'occurrence, il faut dessiner des petites zones carrées. Je suppose qu'une fonction Rectangle doit exister. Le reste, c'est de la programmation simple.
    J'ai R dans ma machine, mais j'avoue que son approche, surtout le caractère interprété ne m'a pas plu. Donc, j'ai laissé tomber.
    Bonne soirée.

  14. #13
    minushabens

    Re : [R] graphiques avancés

    pourquoi est-ce que tu ne remplaces pas ton nuage de points par une fonction de densité?

    j'avais écrit cette fonction. Elle suppose que tes données sont dans les deux premières colonnes de la matrice x. Le paramètre important est h, selon la valeur choisie la surface est plus ou moins lisse. Il te faudra d'abord normaliser tes varibales de sorte qu'en abcisse et en ordonnée tu aies à peu près le même intervalle de variation. Une fois ta densité calculée, tu la dessines avec la fonction "image".

    Code:
    densite2d <- function(x, nx = 20, ny = 20, marge = 0.05, h = 1)
    {
    	xrange <- max(x[, 1]) - min(x[, 1])
    	yrange <- max(x[, 2]) - min(x[, 2])
    	xmin <- min(x[, 1]) - xrange * marge
    	xmax <- max(x[, 1]) + xrange * marge
    	ymin <- min(x[, 2]) - xrange * marge
    	ymax <- max(x[, 2]) + xrange * marge
    	xstep <- (xmax - xmin)/(nx - 1)
    	ystep <- (ymax - ymin)/(ny - 1)
    	xx <- xmin + (0:(nx - 1)) * xstep
    	yy <- ymin + (0:(ny - 1)) * ystep
    	g <- matrix(0, ncol = nx, nrow = ny)
    	n <- dim(x)[[1]]
    	for(i in 1:n) {
    		coefx <- dnorm(xx - x[i, 1], mean = 0, sd = h)
    		coefy <- dnorm(yy - x[i, 2], mean = 0, sd = h)
    		g <- g + coefy %*% t(coefx)/n
    	}
    	return(list(x = xx, y = yy, z = t(g)))
    }
    Dernière modification par JPL ; 13/09/2016 à 12h32. Motif: Ajout de la balise Code (#) pour garder l'indentation

  15. #14
    ansset
    Animateur Mathématiques

    Re : [R] graphiques avancés

    bjr et salut tous.
    effectivement, comme il semble s'agir d'une visualisation qualitative, une approche du type image/densité me semble être la bonne voie.
    si je devais faire une approche "bourrine" :
    je créerai d'abord une image "nuage de points" puis blur, puis evt transformation L->H ( luminosité->teinte à saturation et luminosité cte )
    taille des points et niveau de blur ajustables en fct de la lisibilité cherchée.

    ps: ceci, car un "calcul" de densité me semble bien plus lourd pour une simple visualisation.
    Dernière modification par ansset ; 13/09/2016 à 07h48.
    y'a quelque chose qui cloche là dedans, j'y retourne immédiatement !

  16. #15
    minushabens

    Re : [R] graphiques avancés

    bah le calcul n'est pas du tout lourd. si sous R je lance la commande:

    image(densite2d(matrix(runif(2 000),ncol=2),nx=100,ny=100))

    ça me dessine une densité sur une grille 100x100 à partir d'un nuage de 1000 points en une fraction de seconde.

    au fait je vois que certains caractères ont été remplacés par des smileys dans la fonction que j'ai donnée.

    il fallait lire :

    xx <- xmin + (0 : ( nx - 1)) * xstep
    yy <- ymin + (0 : ( ny - 1)) * ystep

  17. #16
    ansset
    Animateur Mathématiques

    Re : [R] graphiques avancés

    OK, au temps pour moi.
    Cdt
    y'a quelque chose qui cloche là dedans, j'y retourne immédiatement !

Discussions similaires

  1. Attributs physiques pour E.T. technologiquement avancés
    Par MisterH dans le forum Planètes et Exobiologie
    Réponses: 54
    Dernier message: 24/07/2015, 01h45
  2. L'apprentissage avancés ?
    Par invite9b78cab5 dans le forum Technologies
    Réponses: 10
    Dernier message: 29/07/2011, 10h37
  3. Exercices avancés de chimie organiques
    Par Fajan dans le forum Chimie
    Réponses: 1
    Dernier message: 14/03/2010, 20h33
  4. Problèmes dans l'avancés technologique!
    Par invite95786954 dans le forum Technologies
    Réponses: 5
    Dernier message: 31/12/2005, 01h22