72 votes

Créer un barplot empilé où chaque pile est mise à l'échelle pour totaliser 100 %

J'ai un data.frame comme ceci :

 df <- read.csv(text = "ONE,TWO,THREE
                       23,234,324
                       34,534,12
                       56,324,124
                       34,234,124
                       123,534,654")

Je souhaite produire un graphique à barres en pourcentage qui ressemble à ceci (réalisé dans LibreOffice Calc): entrez la description de l'image ici

Ainsi, les barres doivent être standardisées afin que toutes les piles aient la même hauteur et totalisent 100 %. Jusqu'à présent, tout ce que j'ai pu obtenir est un graphique à barres empilé (pas en pourcentage), en utilisant :

 barplot(as.matrix(df))

De l'aide?

19voto

alemol Points 81

Chris Beeley a raison, vous n'avez besoin que des proportions par colonne. L'utilisation de vos données est :

  your_matrix<-( 
               rbind(
                       c(23,234,324), 
                       c(34,534,12), 
                       c(56,324,124), 
                       c(34,234,124),
                       c(123,534,654)
                    )
                )

 barplot(prop.table(your_matrix, 2) )

Donne :

entrez la description de l'image ici

14voto

Chris Beeley Points 340

prop.table est un bon moyen convivial d'obtenir les proportions des tables.

 m <- matrix(1:4,2)

 m
     [,1] [,2]
[1,]    1    3
[2,]    2    4

Laisser la marge vide vous donne les proportions de l'ensemble du tableau

  prop.table(m, margin=NULL)
     [,1] [,2]
[1,]  0.1  0.3
[2,]  0.2  0.4

Lui donner 1 vous donne les proportions des lignes

  prop.table(m, 1)
      [,1]      [,2]
[1,] 0.2500000 0.7500000
[2,] 0.3333333 0.6666667

Et 2 est les proportions de la colonne

  prop.table(m, 2)
          [,1]      [,2]
[1,] 0.3333333 0.4285714
[2,] 0.6666667 0.5714286

5voto

nico Points 21115

Il suffit de diviser chaque élément par la somme des valeurs de sa colonne.

Cela devrait suffire :

 data.perc <- apply(data, 2, function(x){x/sum(x)})

Notez que le deuxième paramètre indique à apply d'appliquer la fonction fournie aux colonnes (en utilisant 1, vous l'appliqueriez aux lignes). La fonction anonyme est alors transmise à chaque colonne de données, une à la fois.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X