Je fais une présentation et je voudrais mettre en évidence le taux d'occurrence de l'un de mes niveaux de facteur sur une diapositive en conservant la couleur de ce niveau de facteur particulier, tout en grisant les autres niveaux de facteur à travers d'autres variables.
En utilisant l'ensemble de données Arthritis
dans la bibliothèque vcd
comme exemple:
library(vcd)
ggplot(Arthritis, aes(x = Sex, fill = Improved)) + geom_bar(position = "fill")
Quand, par exemple, je parle au public de l'amélioration marquée chez les mâles, puis-je avoir une version de l'intrigue qui conserve la couleur d'une amélioration marquée chez les mâles, mais grise tout le reste? De préférence en utilisant différentes nuances de gris pour garder les limites?
3 réponses
Considérez cet exemple:
library(scales)
library(ggplot2)
ggplot(Arthritis)+
geom_bar(aes(x = Sex, group = Improved), fill = c("red", "blue", "green", "yellow", "grey50", "black"), position = "fill")
Pour modifier le champ spécifié, tandis que les autres conservent les couleurs par défaut de ggplot:
ggplot(Arthritis)+
geom_bar(aes(x = Sex,
group = Improved),
fill = c(rev(hue_pal()(3)),
"black",
hue_pal()(3)[2:1]),
position = "fill")
Ou griser le reste avec des nuances
ggplot(Arthritis)+
geom_bar(aes(x = Sex,
group = Improved),
fill = c(paste0("grey", 7:9*10),
hue_pal()(3)[3],
paste0("grey", 8:9*10)),
position = "fill")
Pour conserver la légende, tracez simplement ce qui précède sur votre couche initiale:
ggplot(Arthritis)+
geom_bar(aes(x = Sex, fill = Improved), position = "fill")+
geom_bar(aes(x = Sex,
group = Improved),
fill = c(paste0("grey", 7:9*10),
hue_pal()(3)[3],
paste0("grey", 8:9*10)),
position = "fill")
Vous pouvez ajouter une colonne contenant la carte des couleurs et l'utiliser avec scales_fill_identity()
.
reprex::reprex_info()
#> Created by the reprex package v0.1.1.9000 on 2017-11-18
library(vcd)
#> Loading required package: grid
lvls <- levels(Arthritis$Improved)
color_maps <- scales::grey_pal(start = 0.8, end = 0.9)(length(lvls))
names(color_maps) <- lvls
library(dplyr, warn.conflicts = FALSE)
Arthritis_w_fill <- Arthritis %>%
mutate(
fill = if_else(
Sex == "Male" & Improved == "Marked",
"blue",
color_maps[Improved]
)
)
library(ggplot2)
ggplot(Arthritis_w_fill, aes(x = Sex, fill = fill)) +
geom_bar(position = "fill") +
scale_fill_identity(guide = "legend",
breaks = c(color_maps, "blue"),
labels = c(lvls, 'Sex == "Male" & Improved == "Marked"'))
Ajouter
scale_fill_manual(values=c("Marked" = "RoyalBlue", "Some" = "DarkGrey", "None"="LightGrey"))
Appel ggplot
complet:
ggplot(Arthritis, aes(x = Sex, fill = Improved)) +
geom_bar(position = "fill")+
scale_fill_manual(values=c("Marked" = "RoyalBlue", "Some" = "DarkGrey", "None"="LightGrey"))
De nouvelles questions
r
R est un langage de programmation et un environnement logiciel libres et open source pour le calcul statistique, la bioinformatique, la visualisation et le calcul général. Veuillez fournir des exemples minimaux et reproductibles ainsi que le résultat souhaité. Utilisez dput () pour les données et spécifiez tous les packages non basiques avec des appels à library (). N'incorporez pas d'images pour les données ou le code, utilisez plutôt des blocs de code en retrait. Pour les questions relatives aux statistiques, utilisez https://stats.stackexchange.com.