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 :

Truc bizarre avec la fonction barplot


Sujet :

R

  1. #1
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut Truc bizarre avec la fonction barplot
    Voici le programme suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A=rbind(c(1,0,0,0,0,1),c(0,0,0,2,1,2))
    B=rbind(c(1,NA,NA,NA,NA,0.9),c(NA,NA,NA,1.8,0.8,1.7))
    barplot(A,col=c('blue','red'))			#barres verticales bleues et rouges
    barplot(B,col=c('green','cyan'),add=TRUE)	#barres verticales vertes et cyan
    Lorsqu'on lance le 1er barplot, les barres bleues et rouges s'affichent bien. Elles ont les hauteur qui correspondent à leur valeur. 1 et 1 en bleu aux position 1 et 6, 2-1-2 en rouge aux positions 3, 4, 5.

    Lorsqu'on lance le 2ème barplot, qui est en superposition du 1er, les barres vertes s'affichent, en position 1 et 6, et avec une hauteur de 1 et 0.9.
    Jusque là, rien à dire.

    En revanche, une seule barre cyan s'affiche, en position 6, et sur une hauteur correcte de 1.7.

    On a donc deux barres verticales de couleur cyan qui n'apparaissent pas.
    Elles devraient être en position 4 et 5, et avoir les hauteurs de 1.8 et 0.8.

    Maintenant, si on remplace les NA dans le vecteur B par des 0, tout s'affiche correctement.

    Est-ce que quelqu'un saurait me dire ce qui se passe ?

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Truc bizarre avec la fonction barplot
    Bonjour,

    Pour comprendre ce qui se passe, commencez par réaliser le deuxième barplot sans le superposer au premier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    > B
         [,1] [,2] [,3] [,4] [,5] [,6]
    [1,]    1   NA   NA   NA   NA  0.9
    [2,]   NA   NA   NA  1.8  0.8  1.7
    > barplot(B,col=c('green','cyan'))
    Nom : Sans titre.jpg
Affichages : 287
Taille : 10,5 Ko

    R ne dessine pas les barres correspondant à B[2,4] et B[2,5] parce qu'il ne sait pas à quel niveau les faire commencer.

    Cordialement,

  3. #3
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    Ok, mais alors pourquoi arrive-t-il à dessiner les barres vertes, qui correspondent à B[1,] ?

  4. #4
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Truc bizarre avec la fonction barplot
    Je pense que c'est parce que c'est la première donc on est sûr qu'elle commence à 0.

    En inversant l'ordre des vecteurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    > C=rbind(c(NA,NA,NA,1.8,0.8,1.7),c(1,NA,NA,NA,NA,0.9))
    > C
         [,1] [,2] [,3] [,4] [,5] [,6]
    [1,]   NA   NA   NA  1.8  0.8  1.7
    [2,]    1   NA   NA   NA   NA  0.9
    > barplot(C,col=c('green','cyan'))
    Nom : Sans titre2.jpg
Affichages : 274
Taille : 11,8 Ko

    Cordialement,

  5. #5
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    En effet, barplot commence par exploiter la première ligne. Quand la fonction trouve des NA, elle interprète cela comme étant des positions pour lesquelles on n'a rien à dire, c'est-à-dire des positions à ne pas prendre en compte dans le graphique. Quand il y a zéro, cela signifie que la mesure est nulle. Ce comportement est logique car NA signifie formellement qu'il existe une valeur mais qu'on ne sait pas laquelle. Donc assimiler NA à zéro est formellement faux et, comme le dit l'adage, dans le doute abstiens-toi. C'est ce que fait barplot.

    Preuve
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    B=rbind(c(1,NA,NA,NA,NA,0.9),c(NA,NA,NA,1.8,0.8,1.7), cbind( 2, 2, 2, 2, 2, 2))
    barplot(B,col=c('green','cyan'))
    En position 1, la troisième ligne ne sera pas tracée.

  6. #6
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    Ok, J'éviterais donc les NA dorénavant lorsque j'aurais des doutes

    Merci à vous.

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

Discussions similaires

  1. Truc bizarre avec la fonction abline
    Par enicnath dans le forum R
    Réponses: 2
    Dernier message: 22/10/2016, 18h03
  2. Truc bizarre avec QString
    Par chrtophe dans le forum Débuter
    Réponses: 3
    Dernier message: 30/05/2012, 15h15
  3. Truc bizarre avec Boost.Phoenix
    Par Mat007 dans le forum Boost
    Réponses: 2
    Dernier message: 20/07/2010, 14h57
  4. un truc bizarre avec l'évaluateur delphi
    Par isachat666 dans le forum EDI
    Réponses: 1
    Dernier message: 07/04/2006, 14h22
  5. [C#] Truc bizarre avec DataSet
    Par bendj dans le forum ASP.NET
    Réponses: 15
    Dernier message: 13/07/2005, 19h51

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