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 :

Barplot avec deux jeux de données


Sujet :

R

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 24
    Points : 39
    Points
    39
    Par défaut Barplot avec deux jeux de données
    Bonjour, j'ai un souci avec barplot: je fais un calcul pour connaitre le taux d'immigrés dans différentes professions à l'aide de table et cprop (fonction du package questionr qui renvoie simplement les pourcentages en colonnes d'une table). Je fais le calcul une fois sur tout le territoire français et une fois sur la seule région parisienne (à partir d'une base de données nommée d, sur laquelle j'effectue un subset pour isoler les franciliens). J'arrive à avoir un graphique par calcul, avec le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    barplot(prop[1:2,], ylim = c(0, 100), legend.text = TRUE)
    (prop étant le nom du tableau de pourcentage sur le territoire français). J'aimerais avoir les deux graphiques en un seul, c'est à dire avoir pour chaque profession non plus une mais deux colonnes (une pour l'ensemble, une pour l'IDF). Je n'y arrive pas. Quelqu'un a une idée ?

  2. #2
    Membre confirmé
    Homme Profil pro
    MCU
    Inscrit en
    Juillet 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : MCU
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 185
    Points : 486
    Points
    486
    Par défaut
    Bonjour,

    Vous avez un exemple dans l'aide de la fonction barplot:

    Vous pouvez y arriver en créant un jeu de données unique à partir de vos deux data.frames (avec rbind 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
    test.france <- data.frame(
     pourcentage=sample(x=seq(0, 100, 10), 4, replace=FALSE), 
     csp=c("toto", "tata", "titi", "tutu"), 
     region=rep("France", 4), 
     stringsAsFactors=FALSE)
     
    test.nord <- data.frame(
     pourcentage=sample(x=seq(0, 100, 10), 4, replace=FALSE), 
     csp=c("toto", "tata", "titi", "tutu"), 
     region=rep("Nord", 4), 
     stringsAsFactors=FALSE)
     
    test <- rbind(test.france, test.nord)
     
    barplot(tapply(test$pourcentage, list(test$region, test$csp), c), beside=TRUE, legend.text=TRUE)
    HTH

    Vincent

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 24
    Points : 39
    Points
    39
    Par défaut
    Je ne comprends pas la totalité du code, donc je dois me tromper quelque part puisque ça ne fonctionne pas chez moi.

    Pour commencer, je vais détailler un peu mon cas pour que ce soit clair. J'ai deux jeux de données, l'un, d, avec toute la population, l'autre, didf, avec seulement les parisiens, isolés grâce à subset et une variable région nommée REG.
    Sur chaque jeu de donnée je fais un tri croisé entre immigration (oui/non) et profession (a,b,c). Par exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab <- table(d$immi,d$prof)
    . Sur chacun, je fais ensuite un tableau de pourcentage ainsi: , puis le barplot. ça fonctionne.
    avec , j'arrive à obtenir un barplot, mais le tableau comme le diagramme sont mal ordonnés: R se contente de coller les tableaux, quand je voudrais avoir côte à côte les pourcentages d'immigrés dans la profession a pour chaque population, puis la même chose pour la profession b, etc.

    Maintenant, concernant le code proposé:
    -je ne vois que deux variables, la profession et la région.
    -je ne saisis pas le rôle de tapply, de list, et du "c" dans le code (oui ça fait beaucoup...). Je pense avoir bien compris ce que fait une fonction tapply (appliquer une fonction à plusieurs objets ou cellules), mais je ne vois pas ici...

    Désolé pour mon ignorance, mais si des explications supplémentaires sont possibles, cela m'aiderait bien.

    Merci en tout cas pour la première réponse

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 24
    Points : 39
    Points
    39
    Par défaut
    J'ai fini par réussir, ça paraitra sans doute anodin pour la plupart des gens, mais je poste quand même comment j'ai fait au cas où.

    Concernant le barplot j'ai utilisé le code proposé, bien que j'ai toujours un peu de mal à comprendre ce que signifie la combinaison de tapply et list. Une fois qu'on a un dataframe qui correspond à la forme suggérée par l'exemple de vchouraki ça marche, mais je ne sais pas trop pourquoi.

    Concernant le dit dataframe, ça a été plus compliqué. En fait, avec le calcul précédent, j'obtenais un tableau croisé entre les variables CSP et IMMI, avec chaque CSP deux fois (une pour la France, une pour Paris). Or ce qu'il fallait, c'était un tableau avec tous les pourcentages dans une colonne, une colonne CSP, une colonne région (et au départ une colonne IMMI, où l'on ne conserve ensuite que les lignes comprenant les immigrés). Pour constituer le tableau, j'ai donc fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tab.1 <- data.frame(data.frame(cprop(wtd.table(d$IMMI, d$CSP, weights=d$POIDS, normwt=TRUE))), region = rep("France", 15))
    tab.2 <- data.frame(data.frame(cprop(wtd.table(didf$IMMI, didf$CSP, weights=didf$POIDS, normwt=TRUE))), region = rep("France", 15))
    tab <- rbind(tab.1, tab.2)[tab$Var1 == "immigrés",]
    Ce n'est sans doute pas la solution la plus simple, mais je n'ai pas trouvé mieux... s'il y a des idées je prends!

    puis le barplot comme proposé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    barplot(tapply(tab$Freq, list(tab$region, tab$Var2), c), beside = TRUE, ylim = c(0,100), main = "Pourcentage d'immigrés par PCS selon la région", legend.text = TRUE)
    voilà, donc je n'ai toujours pas vraiment compris exactement pourquoi, mais ça fonctionne. Merci pour votre aide!

    edit: je n'arrive pas à éditer mon premier message pour passer le sujet en résolu, c'est normal?

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/04/2015, 10h44
  2. [XL-2007] Graphique avec deux séries de données distinctes
    Par MatAir dans le forum Excel
    Réponses: 1
    Dernier message: 21/06/2011, 20h08
  3. datatable avec deux bases de données
    Par zabdaniel dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/11/2008, 15h39
  4. problème de séquence avec deux base de donnée JPA sous JBoss
    Par eclectik dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 14/09/2008, 18h55
  5. tableau croise avec plusieurs jeux de données
    Par ecayuno dans le forum BIRT
    Réponses: 1
    Dernier message: 09/08/2007, 15h03

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