-2
votes

Créer un intrigue pour chaque variable de données (toutes les variables sont catégoriques)

J'utilise le jeu de données Soybean à partir du paquet MLBench dans R.

Je veux montrer une distribution de fréquence en créant des graphiques à barres simples pour chaque variable (toutes catégoriques). Les parcelles devraient ressembler à ceci:

https://www.statmethods.net/graphiques/images/barplot1.jpg

Merci d'avance, M


0 commentaires

3 Réponses :


0
votes

Si vous souhaitez grapher toutes les variables, vous pouvez utiliser une boucle sur les colnames de votre jeu de données. Utilisez ggplot () code> et la fonction get () code> pour se concentrer sur le nom de la variable.

library(mlbench)
data(Soybean)
library(ggplot2)
library(dplyr)       

for(j in 1:ncol(Soybean)){

  var <- colnames(Soybean)[j]

  Soybean %>% 
    ggplot(aes(x = get(var))) + 
    geom_histogram(stat = 'count') +
    labs(x = 'var')

}


1 commentaires

Merci pour votre contribution. Cela a bien fonctionné et était exactement ce que je cherchais. Encore une fois, merci beaucoup. Cependant, le temps de calcul était supérieur à la méthode du commentaire ci-dessus.



0
votes

Utilisation de la base R, vous pouvez obtenir le résultat souhaité avec:

my.barplot.function = function(x){ 
  heights = table(x)
  barplot(heights, names.arg = levels(x))
}

apply(Soybean, 2, my.barplot.function)


2 commentaires

Merci pour votre contribution. Cela a très bien fonctionné. Grande entrée, j'apprécie beaucoup votre aide.


@Mlu: Heureux d'entendre que cela a bien fonctionné pour vous. Même si ce n'est pas la meilleure réponse, veuillez envisager de lui donner un upvote si vous avez trouvé le code et le résultat utile pour résoudre votre problème et pour une programmation future :)



2
votes

Comme alternative, vous pouvez également essayer {pcurr} code> pour appliquer un processus {ggplot2} code> sur chaque colonne des données. J'ai utilisé aes_string () code> ici afin que les noms de colonne puissent être transmis comme des chaînes au ggplot code> esthétique.

éditer: Utilisation de gridextra :: Marchangegrob () pour produire un 6 x 6 Agencement de toutes les figures. P>

library(mlbench)
library(purrr)
library(ggplot2)
library(gridExtra)

data("Soybean")

marrangeGrob(
  map(
    names(Soybean), 
    ~ ggplot(Soybean, aes_string(.x)) + 
      geom_bar()
  ),
  ncol = 6,
  nrow = 6,
  top = "Soybean Distribution"
)


2 commentaires

Merci pour votre contribution, c'est exactement ce que je cherchais. Cependant, je pensais créer un espace de 6 x 6 terrain, de sorte que je puisse les voir tous en même temps. Y a-t-il un moyen d'intégrer cela dans votre code? Merci d'avance,


J'ai édité la réponse de telle sorte que vous obtenez le complot 6 x 6. J'ai utilisé Gridextra :: Marchangegrob (). Il y a une augmentation du temps de calcul, mais j'espère que ça va.