2017-05-19 6 views
1

Biologe und ggplot2 Anfänger hier. Ich habe einen relativ großen Datensatz von DNA-Sequenzdaten (Millionen von kurzen DNA-Fragmenten), den ich für jede Sequenz zuerst nach Qualität filtern muss. Ich möchte veranschaulichen, wie viele meiner Lesevorgänge mit einem gestapelten Balkendiagramm mit ggplot2 herausgefiltert werden.Umsortierungsfaktoren für einen gestapelten Barplot in ggplot2

Ich habe herausgefunden, dass ggplot die Daten im Langformat mag und haben erfolgreich mit der Schmelze Funktion von reshape2 umformatiert

Dies ist, was eine Teilmenge der Daten, wie im Moment aussieht:

library sample filter value 
LIB0 0011a F1 1272707 
LIB0 0018a F1 1505554 
LIB0 0048a F1 1394718 
LIB0 0095a F1 2239035 
LIB0 0011a F2 250000 
LIB0 0018a F2 10000 
LIB0 0048a F2 10000 
LIB0 0095a F2 10000 
LIB0 0011a P 2118559 
LIB0 0018a P 2490068 
LIB0 0048a P 2371131 
LIB0 0095a P 3446715 
LIB1 0007b F1 19377 
LIB1 0010b F1 79115 
LIB1 0011b F1 2680 
LIB1 0007b F2 10000 
LIB1 0010b F2 10000 
LIB1 0011b F2 10000 
LIB1 0007b P 290891 
LIB1 0010b P 1255638 
LIB1 0011b P 4538 

Bibliothek und Beispiel sind meine ID-Variablen (das gleiche Beispiel kann in mehreren Bibliotheken sein). "F1" und "F2" bedeuten, dass während dieses Schritts viele Lesevorgänge herausgefiltert wurden. "P" bedeutet die verbleibende Anzahl von Lesevorgängen nach dem Filtern.

Ich habe herausgefunden, wie man einen einfachen gestapelten Barplot erstellt, aber jetzt bekomme ich Probleme, weil ich nicht herausfinden kann, wie die Faktoren auf der X-Achse richtig sortiert werden, so dass die Balken in der Plot-Reihenfolge absteigend sortiert sind auf die Summe von F1, F2 und P. die Art und Weise ist es jetzt denke ich, sie sind in alphabetischer Reihenfolge innerhalb Bibliothek sortiert basierend auf Beispielnamen

testdata <- read.csv('testdata.csv', header = T, sep = '\t') 

ggplot(testdata, aes(x=sample, y=value, fill=filter)) + 
    geom_bar(stat='identity') + 
    facet_wrap(~library, scales = 'free') 

enter image description here

Nach einigen googeln ich über die Aggregatfunktion festgestellt, dass gibt mir die Summe für jede Probe pro Bibliothek:

Während dies mir die Summen gibt, habe ich jetzt keine Ahnung, wie ich dies verwenden kann, um die Faktoren neu zu ordnen, vor allem da es zwei sind, die ich berücksichtigen muss (Bibliothek und Probe).

Also meine Frage läuft auf: Wie kann ich meine Proben in meinem Diagramm basierend auf der Summe von F1, F2 und P für jede Bibliothek bestellen?

Vielen Dank für Hinweise, die Sie mir geben können!

+1

Könnte [dies von SO] (http: // Stackoverflow .com/questions/36438883/reorder-stacks-in-horizontal-stacked-barplot-r? rq = 1) dir behilflich sein? – KoenV

Antwort

1

Sie sind fast da. Sie müssen Faktorstufen von testdata$sample auf den aggregierten Daten basieren ändern (Ich nehme kein Beispielnamen in beiden lib1 und lib0 erschienen):

df <- aggregate(value ~ library+sample, testdata, sum) 

testdata$sample <- factor(testdata$sample, levels = df$sample[order(-df$value)]) 

ggplot(testdata, aes(x=sample, y=value, fill=filter)) + 
    geom_bar(stat='identity') + 
    facet_wrap(~library, scales = 'free') 

enter image description here

+0

Perfekt, das hat es geschafft! Ich schätze die Hilfe, vielen Dank! – Sam

Verwandte Themen