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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2003
    Messages
    554
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 554
    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 Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    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 : 307
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 éclairé
    Inscrit en
    Novembre 2003
    Messages
    554
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 554
    Par défaut
    Ok, mais alors pourquoi arrive-t-il à dessiner les barres vertes, qui correspondent à B[1,] ?

  4. #4
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    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 : 291
Taille : 11,8 Ko

    Cordialement,

  5. #5
    Membre émérite
    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
    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 éclairé
    Inscrit en
    Novembre 2003
    Messages
    554
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 554
    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 Christophe 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