Supprimer les niveaux de facteurs non utilisés d'une placette à barres ggplot
je veux faire le contraire de cette question, et en quelque sorte le contraire de cette question, bien qu'il s'agisse de légendes, pas de l'intrigue elle-même.
les autres questions SO semblent se demander comment facteurs non utilisés. J'aimerais vraiment le mien supprimé. J'ai plusieurs variables de nom et plusieurs colonnes (grand format) d'attributs de variables que j'utilise pour créer de nombreux tracés de barre. Voici un reproductible exemple:
library(ggplot2)
df <- data.frame(name=c("A","B","C"), var1=c(1,NA,2),var2=c(3,4,5))
ggplot(df, aes(x=name,y=var1)) + geom_bar()
j'obtiens ceci:
Je ne veux que les noms qui ont le var correspondant n's dans mon bar de l'intrigue (comme dans, il n'y aurait pas d'espace vide pour B).
réutiliser le code de la parcelle de base sera assez facile si je peux simplement changer le nom de mon fichier de sortie et y=var
bit. Je ne voudrais pas avoir à sous-ensemble ma base de données juste pour utiliser des droplevels sur le résultat pour chaque parcelle si possible!
mise à jour basée sur le na.omit()
suggestion
envisager un ensemble de données révisé:
library(ggplot2)
df <- data.frame(name=c("A","B","C"), var1=c(1,NA,2),var2=c(3,4,5), var3=c(NA,6,7))
ggplot(df, aes(x=name,y=var1)) + geom_bar()
j'ai besoin d'utiliser na.omit()
pour le traçage var1
parce qu'il y a un présent NA. Mais depuis na.omettre assure que les valeurs sont présentes pour toutes les colonnes, l'intrigue supprime A
aussi bien puisqu'il a un NA dans var3
. C'est plus analogue à mes données. J'ai un total de 15 réponses avec NAs peppered. Je ne souhaitez supprimer des niveaux de facteurs qui n'ont pas de valeurs pour les tracés vecteur y, pas qui ont NAs dans vecteur dans toute la base de données.
2 réponses
une option facile est d'utiliser na.omit()
sur votre bloc de données df
pour supprimer ces lignes NA
ggplot(na.omit(df), aes(x=name,y=var1)) + geom_bar()
compte tenu de votre mise à jour, les
ggplot(df[!is.na(df$var1), ], aes(x=name,y=var1)) + geom_bar()
fonctionne bien et ne considère que NA
Var1
. Etant donné que vous complotez seulement!--8--> et Var
, s'appliquent na.omit()
à une base de données ne contenant que les variables
ggplot(na.omit(df[, c("name", "var1")]), aes(x=name,y=var1)) + geom_bar()
notez que, lorsque vous tracez, vous utilisez seulement deux colonnes de votre base de données, ce qui signifie que, plutôt que de passer vos données entières.encadrez vous pourriez prendre les colonnes pertinentes x[,c("name", "var1")]
appliquer na.omettre d'enlever les indésirables lignes (comme Gavin Simpson suggère) na.omit(x[,c("name", "var1")])
et ensuite tracer ces données.
mon r / ggplot est assez rouillé, et je me rends compte qu'il y a probablement des moyens plus propres pour y parvenir.