Ce que je veux réaliser est exactement le même que celui qui a déjà été demandé ici (et en particulier en utilisant les graphiques de base de R, pas des packages comme ggplot
ou lattice
): Commande des barres dans barplot ()
Cependant, les solutions qui y sont proposées ne semblent pas fonctionner pour moi. Ce dont j'ai besoin est le suivant. Supposons que j'ai ceci:
num <- c(1, 8, 4, 3, 6, 7, 5, 2, 11, 3)
cat <- c(letters[1:length(num)])
data <- data.frame(num, cat)
Si je génère un barplot en utilisant barplot(data$num)
, voici ce que j'obtiens:
Maintenant, je veux réorganiser les barres selon data$cat
. En suivant le lien que j'ai mentionné ci-dessus, j'ai essayé la réponse acceptée mais j'ai eu une erreur:
num2 <- factor(num, labels = as.character(cat))
Error in factor(num, labels = as.character(cat)) : invalid 'labels'; length 10 should be 1 or 9
Ensuite, j'ai également essayé l'autre réponse:
num <- as.factor(num)
barplot(table(num))
Mais voici ce que j'ai obtenu:
Donc, dans ce cas particulier, qui est légèrement différent de cette question, comment dois-je commander le barplot pour que les barres soient définies par data$num
Mais ordonnées selon data$cat
?
Je reçois ce qui suit,
num <- c(1, 8, 4, 3, 6, 7, 5, 2, 11, 3)
cat <- c(letters[1:10])
data <- data.frame(num, cat)
barplot(data[order(data[,1],decreasing=TRUE),][,1],names.arg=data[order(data[,1],decreasing=TRUE),][,2])
Le code ci-dessus utilise deux fois la fonction order () (voir les commentaires ci-dessous). Pour éviter cela, les résultats du data.frame commandé peuvent être stockés dans un nouveau data.frame et cela peut être utilisé pour générer le barplot.
num <- c(1, 8, 4, 3, 6, 7, 5, 2, 11, 3)
cat <- c(letters[1:10])
data <- data.frame(num, cat)
data2 <- data[order(data[,1],decreasing=TRUE),]
barplot(data2[,1],names.arg=data2[,2])
vous pouvez utiliser ggplot pour ce faire
library("ggplot2")
num <- c(1, 8, 4, 3, 6, 7, 5, 2, 11, 3)
cat <- c(letters[1:10])
data <- data.frame(num, cat)
ggplot(data,aes(x= reorder(cat,-num),num))+geom_bar(stat ="identity")
Utilisation des fonctions de base
df <- data[order(data$num,decreasing = TRUE),]
barplot(df$num,names.arg = df$cat)
Vous pouvez également utiliser les éléments suivants si vous ne souhaitez pas placer vos données dans un nouveau cadre de données. Un peu plus simple.
barplot(sort(data$num, decreasing = TRUE))