web-dev-qa-db-fra.com

R ggplot barplot; Remplir en fonction de deux variables distinctes

Une image en dit plus que mille mots. Comme vous pouvez le constater, ma fill est basée sur la variable variable

Chaque barre contient cependant plusieurs entités de données (bordures noires) car la variable discrète complexity les rend uniques. Ce que j'essaie de trouver, c’est quelque chose qui rend chaque section de la barre plus reconnaissable que son apparence actuelle. Il serait préférable que cela ressemble à de l'ombrage.

http://s12.postimage.org/ltgs677ul/snapshot2.png

Voici un exemple (pas le même jeu de données, car l'original a été importé):

dat <- read.table(text = "Complexity Method Sens Spec MMC
1 L Alpha 50 20 10
2 M Alpha 40 30 80
3 H Alpha 10 10 5
4 L Beta 70 50 60
5 M Beta 49 10 80
6 H Beta 90 17 48
7 L Gamma 19 5 93
8 M Gamma 18 39 4
9 H Gamma 10 84 74", sep = "", header=T)

library(ggplot2)
library(reshape)
short.m <- melt(dat)
ggplot(short.m, aes(x=Method, y= value/100 , fill=variable)) + 
    geom_bar(stat="identity",position="dodge", colour="black") + 
    coord_flip()
18
user1476968

C'est loin d'être parfait, mais j'espère que c'est un pas dans la bonne direction, car il est esquivé par variable, mais parvient tout de même à représenter Complexity d'une manière ou d'une autre:

ggplot(short.m, aes(x=Method, y=value/100, group=variable, fill=variable, alpha=Complexity,)) + 
  geom_bar(stat="identity",position="dodge", colour="black") +
  scale_alpha_manual(values=c(0.1, 0.5, 1)) +
  coord_flip()

enter image description here

26
Marius

Difficile d'être sûr sans un exemple reproductible, comme l'a dit Chase, mais ajouter alpha=complexity pourrait fonctionner:

ggplot(short.m, aes(x=Method, y= value/100 , fill=variable, alpha=complexity)) +
geom_bar(stat="identity",position="dodge", colour="black") + coord_flip()
1
Dan M.

Vous devrez peut-être séparer vos facteurs Method et variable. Voici deux façons de le faire:

Utilisez facet_wrap():

    ggplot(short.m, aes(x=variable, y=value/100, fill=Complexity)) + 
    facet_wrap(~ Method) + geom_bar(position="stack", colour="black") +
    scale_alpha_manual(values=c(0.1, 0.5, 1)) + coord_flip()

Utilisez les deux sur l'axe des x:

    ggplot(short.m, aes(x=Method:variable, y=value/100, group=Method, fill=variable, alpha=Complexity,)) + 
    geom_bar(stat="identity", position="stack", colour="black") +
    scale_alpha_manual(values=c(0.1, 0.5, 1)) + coord_flip()
0
Dan M.