Hier ist ein Beispiel data.frame mit 30 eindeutigen Proben (ID 1 bis 30), und jede Probe hat drei Messungen (bei drei verschiedenen Schwellenwerten ('G1' Spalte); 5e-03, 5e -05, 5e-08). Jede der 90 Beobachtungen hat einen p-Wert (P-Spalte). Schließlich ist jeder der dreißig Proben kann auf eine von zehn verschiedenen Kategorien gehören (‚G2‘)facet barplot auf unebener Kategorie
# example data.frame
df <- data.frame(
'ID' = as.character(unlist(lapply(seq(1:30), function(x) rep(x,3)))),
'P' = runif(n = 90, min = 0, max = 1),
'G1' = as.character(c('5e-03','5e-05','5e-08')),
'G2' = as.character(unlist(lapply(sample(1:10, size = 30, replace = T), function(x) rep(x,3))))
)
ich eine schöne Bar Grundstück mit diesem Befehl erzeugen kann [sorry für alle numerischen Variablen!];
ggplot(df, aes(x = interaction(ID,G2), y = P, fill = G2)) +
geom_bar(stat = 'identity') +
coord_flip() +
facet_grid(. ~ G1)
, die wie folgt aussieht:
Plot 1: image with one facet, and 'G2' visualised using colour
Aber was ich wirklich tun möchte, ist zwei Facetten haben; "G1" auf den Spalten (wie es derzeit ist) und anstatt Bar Farbe zu verwenden, um die 'G2' Variable abzugrenzen, würde ich eine zweite horizontale Facette auf G2. Dies ist, was ich versucht habe:
ggplot(df, aes(x = interaction(ID,G2), y = P, fill = G2)) +
geom_bar(stat = 'identity') +
coord_flip() +
facet_grid(G2 ~ G1)
und es ist nicht richtig. Wenn ich auf G2 Facette, ist es alle Proben in jeder Facette plotten. Dies ist hässlich, da jedes Sample nur zu einer G2-Kategorie gehören kann. Wie erzeuge ich die zweite Facette, in der nur die zu dieser Gruppe gehörenden Balken geplottet werden? Ich habe versucht, die Variablen 'drop', 'scale' und 'space' in facet_grid anzupassen, aber es verbessert die Dinge nicht.
This ist was ich suche - ich habe manuell Rechtecke über die Teile der Handlung gezeichnet, die in der Facette sein sollte. Es ist im Wesentlichen das Gleiche wie Diagramm 1, außer dass die Balken in eine G2-Facette aufgeteilt sind.
Warum haben Sie coord_flip() hinzugefügt? entfernen Sie es und führen Sie den gleichen Code erneut aus. Ich denke das ist was du suchst –
danke für die Antwort. Das Entfernen von coord_flip() löst das Problem nicht, die G2-Facette zeichnet noch unbeobachtete Daten auf. Ich benutze coord_flip(), weil ich die Grafik über die Seite aus ästhetischen Gründen möchte. – mbyvcm
Vielleicht die Interaktion ändern, um einfügen? 'einfügen (ID, G2, sep =". ")' – zx8754