Quand je fais des diagrammes en boîte, j'aime aussi montrer les données brutes en arrière-plan, comme ceci :
library(ggplot2)
library(RColorBrewer)
cols = brewer.pal(9, 'Set1')
n=10000
dat = data.frame(value=rnorm(n, 1:4), group=factor(1:4))
ggplot(dat, aes(x=group, y=value, color=group, group=group)) +
geom_point(position=position_jitter(width=0.3), alpha=0.1) +
scale_color_manual(values=cols) +
geom_boxplot(fill=0, outlier.size=0)
Cependant, je n'aime pas la façon dont mes diagrammes en boîte disparaissent complètement lorsque les points deviennent trop denses. Je sais que je peux ajuster alpha
ce qui est correct dans certains cas, mais pas lorsque mes groupes ont des densités variables (par exemple, lorsque le groupe le plus léger disparaîtrait complètement si je diminuais la valeur de alpha
suffisamment pour que le groupe le plus sombre ne masque pas le box plot). Ce que j'essaie de faire, c'est de décaler systématiquement les couleurs des box plots - un peu plus foncées, peut-être - afin qu'elles apparaissent même lorsque les points d'arrière-plan maximisent l'alpha. Par exemple :
plot(1:9, rep(1, 9), pch=19, cex=2, col=cols)
cols_dk = rgb2hsv(col2rgb(brewer.pal(9, 'Set1'))) - c(0, 0, 0.2)
cols_dk = hsv(cols_dk[1,], cols_dk[2,], cols_dk[3,])
points(1:9, rep(1.2, 9), pch=19, cex=2, col=cols_dk)
Jusqu'à présent, je n'ai pas trouvé le moyen de simuler une autre scale_color
pour le geom_boxplot
(ce qui semble être la solution la plus simple, s'il y a un moyen de le faire). Je n'ai pas non plus été capable de trouver une syntaxe simple pour ajuster systématiquement les couleurs de la même manière que vous pouvez facilement compenser une esthétique continue comme aes(x=x+1)
.
La chose la plus proche que j'ai été capable d'obtenir est de dupliquer complètement les niveaux du facteur...
ggplot(dat, aes(x=group, y=value, color=group, group=group)) +
geom_point(position=position_jitter(width=0.3), alpha=0.1) +
scale_color_manual(values=c(cols[1:4], cols_dk[1:4])) +
geom_boxplot(aes(color=factor(as.numeric(group)+4)), fill=0, outlier.size=0)
mais ensuite je dois faire face à cette horrible légende. Une meilleure idée ?
2 votes
Pourquoi ne pas rendre les boîtes noires ?
0 votes
J'ai d'abord pensé à ce que @kohske a dit, mais je pense que cela va à l'encontre de la valeur alpha qui infecte la légende et rend les couleurs illisibles (au moins jusqu'à la sortie de la 0.9.0 dans quelques semaines, je pense).
0 votes
Oui, le noir/gris est tout à fait acceptable (cf. i.imgur.com/7KKg2.png ), mais je n'aime pas la façon dont il peut dominer/distraire du codage des facteurs que j'essaie généralement de mettre en évidence. Je suppose que je pense que ce serait juste encore plus beau si je pouvais garder le même schéma de couleurs mais en le décalant un peu.
0 votes
Je serais même satisfait de mon hack ci-dessus s'il y avait un moyen de supprimer les 4 niveaux "factices" de la légende. (est-ce possible ?)
0 votes
En y réfléchissant, ce type de changement de couleur serait également utile, de manière plus générale, pour une variété d'autres couches de type résumé. Voici un exemple aléatoire d'un biplot PCA codé par cluster k-means. i.imgur.com/iN6xh.png Je voulais également superposer les points centraux de l'amas, mais j'ai dû me résoudre à utiliser un symbole de traçage différent pour éviter que les points ne soient perdus dans le nuage. Ce serait encore plus efficace si j'avais pu simplement décaler un peu les valeurs comme ci-dessus.
1 votes
Il y a eu une discussion à un moment donné sur un
hcl
échelle de couleurs, où l'on pouvait cartographier indépendamment les trois paramètres. Je pense que cela pourrait être une bonne option ici.0 votes
@baptiste Oui, exactement ! Ici, je garderais la teinte cartographiée comme une esthétique pour
group
dans les deux couches, mais pour legeom_boxplot
Je réglerais la luminosité (comme un paramètre constant) pour qu'elle soit un peu plus sombre.0 votes
Solution alternative suggérée : github.com/hadley/ggplot2/issues/723