2016-08-04 7 views
1

Ich habe folgende Eingabe für eine gruppierte Balkendiagramm, das ich mit ggplot2 erzeugen:R ggplot2: Farbe gruppierten BarPlot basierend auf Bedingung/numerischen Schwellwerten

Disease;Category;Value;pValue 
Disease A;Count;100;0.0001 
Disease A;Expected Count;50;0.0001 
Disease B;Count;80;0.0005 
Disease B;Expected Count;40;0.0005 
Disease C;Count;60;0.0010 
Disease C;Expected Count;40;0.0010 
Disease D;Count;45;0.05 
Disease D;Expected Count;50;0.05 

Der folgende Code erzeugt den gruppierten BarPlot:

literature.disease2 <- read.table(file = "/user/literature-disease2.csv",sep=";", header=TRUE) 
literature.disease2.sorted <- literature.disease2[order(literature.disease2$pValue,literature.disease2$Category),] 
ggplot(data=literature.disease2.sorted, aes(x=Disease, y=Value, fill=Category)) + 
geom_bar(stat="identity", position=position_dodge(),size=.3, colour="black") + 
    scale_fill_manual(values=c("Count" = "lightblue", "Expected Count" = "pink")) + # Change color 
    xlab("Disease Category") + ylab("Literature Count") + # Set axis labels 
    ggtitle("Genome-Wide Literature Counts") +  # Set title 
    theme_bw() + 
    theme(axis.text.x = element_text(angle =90, hjust = 1,vjust=0.5)) 

Dies ist die Handlung: enter image description here

Nun möchte Ich mag die Bars in blau färben (statt von hellblau) und lila (statt rosa) immer wenn der pValue < = 0.005. Ich weiß, dass ich die scale_fill_manual Option ändern muss, aber ich weiß nicht, wie man das für gruppierte Balkendiagramme macht. Kann jemand helfen?

Vielen Dank im Voraus, Frank

+1

Dies ist eine gute Frage. Ich denke jedoch, dass Ihr Code mit vielen unnötigen Teilen zu unordentlich ist. Versuchen Sie, Ihre Beispiele so minimal wie möglich zu halten, damit andere sie leichter verstehen können. – Alex

+0

Ja, Sie haben Recht. Ich sollte mich auf die spezifische Frage konzentrieren, damit andere leichter folgen können. – Frank

Antwort

1

Dieser Code könnte Ihnen den Einstieg, aber denken Bedeutung wie zum Beispiel alpha Ästhetik statt Doppelcodierung über das Hinzufügen.

Der entscheidende Punkt ist interaction() als fill Ästhetik und Zuordnung der Farben entsprechend.

library(ggplot2) 
literature.disease2 <- read.table(text = "Disease;Category;Value;pValue 
Disease A;Count;100;0.0001 
Disease A;Expected Count;50;0.0001 
Disease B;Count;80;0.0005 
Disease B;Expected Count;40;0.0005 
Disease C;Count;60;0.0010 
Disease C;Expected Count;40;0.0010 
Disease D;Count;45;0.05 
Disease D;Expected Count;50;0.05",sep=";", header=TRUE) 
literature.disease2.sorted <- literature.disease2[order(literature.disease2$pValue,literature.disease2$Category),] 
ggplot(data=literature.disease2.sorted, aes(x=Disease, y=Value, fill=interaction(Category, pValue <= .005))) + 
    geom_bar(stat="identity", position=position_dodge(),size=.3, colour="black") + 
    scale_fill_manual(values=c("Count.FALSE" = "lightblue", "Count.TRUE" = "blue", "Expected Count.FALSE" = "pink", "Expected Count.TRUE" = "purple")) + # Change color 
    xlab("Disease Category") + ylab("Literature Count") + # Set axis labels 
    ggtitle("Genome-Wide Literature Counts") +  # Set title 
    theme_bw() + 
    theme(axis.text.x = element_text(angle =90, hjust = 1,vjust=0.5)) 

ist hier ein Grundstück mit meinem Vorschlag:

ggplot(data=literature.disease2.sorted, aes(x=Disease, y=Value, fill=Category, alpha = pValue <= .005)) + 
    geom_bar(stat="identity", position=position_dodge(),size=.3, colour="black") + 
    scale_fill_manual(values=c("Count" = "blue", "Expected Count" = "purple")) + # Change color 
    scale_alpha_discrete(range = c(0.5, 1)) + # Make the "insignificant" bars a little more visible (default range = c(0.1,1)) 
    xlab("Disease Category") + ylab("Literature Count") + # Set axis labels 
    ggtitle("Genome-Wide Literature Counts") +  # Set title 
    theme_bw() + 
    theme(axis.text.x = element_text(angle =90, hjust = 1,vjust=0.5)) 
+0

Vielen Dank für die Lösung. Die Verwendung der Option "interaction()" war das fehlende Teil. – Frank