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

R Discussion :

diagramme en camembert fonction pie()


Sujet :

R

  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2015
    Messages : 101
    Par défaut diagramme en camembert fonction pie()
    Bonjour,

    je souhaite réaliser un diagramme en camembert pour mes variable "w, x, y, z" pour chaque localisation mais la structure de mon data frame nécessite des manipulations que j'ai du mal à réaliser sous R.

    je doit calculer les pourcentages de chaque variable pour chaque observation, puis calculer la moyenne des pourcentages pour la localisation NC et MB dans cet exemple. Enfin je dessine le diagramme pour mes variables w, x, y, z de chacune des localisations.

    voila comment se présente mon tableau de données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      localisation    w    x    y    z
    1           NC 0.85 0.42 0.95 0.54
    2           NC 0.95 0.58 0.68 0.62
    3           NC 1.20 0.49 0.85 0.83
    4           NC 0.66 0.97 1.31 0.75
    5           MB 0.99 0.58 0.84 0.69
    6           MB 1.95 0.84 1.23 0.85
    7           MB 2.50 1.14 1.35 0.74
    8           MB 0.54 0.74 1.25 0.79
    9           MB 0.96 0.68 1.29 0.56
    j'espère que c'est claire.

    a+

  2. #2
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # calcul des pourcentages
    perc <- tab[-1]/rowSums(tab[-1])
     
    # moyenne par localisation
    percm <- aggregate(perc, tab[1], colMeans)
     
    #pour le premier graph :
    pie(unlist(percm[1,-1]))
     
    # pour le deuxième
    pie(unlist(percm[2,-1]))
    Après on peut faire plus chouette avec d'autres librairies notamment celles qui se basent sur ggplot2.

    cdlt

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2015
    Messages : 101
    Par défaut
    Salut tototode et merci pour ton aide, cependant j'ai suivis une autre voie pour résoudre le problème, mais je l'avoue ton code m'a beaucoup inspiré. voila comment je m'y suis pris:
    disons que mon data frame se nomme mydata

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    perc <- mydata[1:4,2:5]/rowSums(mydata[1:4,2:5])
    pie(colMeans(perc))
    je n'ai pas utilisé ton code car y a certains arguments que je n'ai pas compris tel que "tab" ou encore "[-1]". à quoi renvois le -1.

    enfin y a-il un moyen d'afficher les pourcentages avec cette fonction ou faut-il passer par ggplot2?

    merci

  4. #4
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Par défaut
    tab c'était le nom de ton data.frame qui contient tes données. tab[-1] ça permet de ne pas prendre en compte la première colonne de tab. Pour un data.frame ça revient à faire tab[,-1] (code qui fonctionne sur un data.frame et une matrice). Après tout ce qui concerne la fonction aggregate c'était pour faire les moyennes par localisation (voir aussi du côté des packages tidyverse, comme dplyr).

    Pour ce qui est de la customisation des camemberts tu peux jeter un oeil ici :
    https://www.statmethods.net/graphs/pie.html

    Après le camembert est déconseillé dans tout les bouquins qui parlent de représentation graphique des données, justement parce que les aires de deux secteurs sont difficilement comparables, difficilement appréciables et qu'on est donc obligé de rajouter sur le graph l'information qu'il est censé représenter : les pourcentages.

    cdlt

  5. #5
    Membre confirmé
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2015
    Messages : 101
    Par défaut
    merci pour les explications,

    cependant comme j'ai un data frame le code je l'ai un peu changé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    perc <- my.data[,2:7]/rowSums(my.data[,2:7])
    percm <- aggregate(perc,  by=list(localisation=my.data[,8]), mean)
    pie(unlist(percm[1,2:7]))
    comme tu le vois j'ai pas utilisé la fonction colMeans car lorsque je l'utilise j'ai un message d'erreur je ne sais pas trop pourquoi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    percm <- aggregate(perc,  by=list(localisation=my.data[,8]), colMeans)
    Error in FUN(X[[i]], ...) : 
      'x' must be an array of at least two dimensions
    Après le camembert est déconseillé dans tout les bouquins qui parlent de représentation graphique des données, justement parce que les aires de deux secteurs sont difficilement comparables
    c'est justement cette propriété qui est intéressante car elle permet de voir si il y a une ou deux variables qui sortent du lot. Si les aires sont difficilement comparables cela veut dire qu'ils ont des fréquences proches.

  6. #6
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Par défaut
    c'est justement cette propriété qui est intéressante car elle permet de voir si il y a une ou deux variables qui sortent du lot. Si les aires sont difficilement comparables cela veut dire qu'ils ont des fréquences proches.
    Tout est toujours une question de point de vues. Pour ma part je considère qu'un graph doit te permettre d'accéder aux informations (valeurs) sans qu'il soit nécessaire d'en rajouter dessus. Ce qui n'est pas le cas du camembert puisque si tu veux estimer l'information représentée (le pourcentage) c'est quasiment impossible. Qui peut dire sans information supplémentaire, à quel pourcentage équivaut chaque secteur ?

    colMeans est une fonction qui travaille sur un objet à deux dimensions minimum alors que la fonction aggregate va travailler colonne par colonne et appliquer des tapply sur chacune des colonnes. Par conséquent les données stockées dans chaque colonne ne sont pas de dimensions deux (sauf cas très rares) mais des vecteurs avec juste une longueur d'où ton message.

    Avec aggregate il te faut utiliser mean et non colMeans (réservé à l'ensemble du tableau).

    cdlt

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 22/01/2008, 12h00
  2. Camemberts et diagrammes
    Par mestressat dans le forum Composants VCL
    Réponses: 3
    Dernier message: 27/12/2007, 11h34
  3. [FLASH 8] Camembert / Diagramme dynamique
    Par VincentB dans le forum Flash
    Réponses: 3
    Dernier message: 09/05/2007, 12h02
  4. Réponses: 5
    Dernier message: 22/11/2006, 15h57
  5. Les fonctions d'un diagramme de séquence
    Par bitou dans le forum Rational
    Réponses: 3
    Dernier message: 12/02/2006, 14h50

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