Mehrere Histogramme in ggplot2
Hier ein kleiner Teil meiner Daten:
dat <-structure(list(sex = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("male",
"female"), class = "factor"), A = c(1, 2, 0, 2, 1, 2, 2, 0, 2,
0, 1, 2, 2, 0, 0, 2, 0, 0, 0, 2), B = c(0, 0, 0, 0, 0, 2, 0,
0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0), C = c(1, 2, 1, 0, 0,
2, 1, 1, 0, 1, 1, 0, 1, 2, 1, 2, 0, 2, 1, 2), D = c(2, 2, 0,
2, 2, 2, 1, 0, 1, 1, 1, 0, 1, 2, 0, 0, 1, 1, 1, 0), E = c(0,
0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 2, 2), F = c(2,
2, 1, 2, 1, 2, 2, 0, 1, 2, 0, 1, 2, 2, 0, 1, 2, 2, 2, 2)), .Names = c("sex",
"A", "B", "C", "D", "E", "F"), variable.labels = structure(c("sex",
"zenuwac", "panieke", "gespann", "rustelo", "angstig", "onzeker"
), .Names = c("sex", "anx01", "anx02", "anx03", "anx04", "anx05",
"anx06")), codepage = 20127L, row.names = c(NA, 20L), class = "data.frame")
Einen Daten-frame mit Dutzenden von Männchen und Weibchen auf sechs 3-Punkt-Variablen. Jetzt möchte ich das erstellen einer plot zeigt die Histogramme der Werte der einzelnen Variablen, die sowohl Männer als auch Frauen in ein raster. Zum Beispiel, ich geben kann:
layout(matrix(1:12,6,2,byrow=TRUE))
par(mar=c(2,1,2,1))
for (i in 1:6) for (s in c("male","female")) hist(dat[dat$sex==s,i+1],main=paste("item",names(dat)[i+1],s))
sind die Ergebnisse in:
Ich könnte besser Aussehen, aber ich bin mehr daran interessiert, lernen, wie man ggplot2. Meine Frage ist also, wie erstelle ich eine gelungene version von diesem mit ggplot2? Eine Sache, die ich gearbeitet haben, ist:
library("ggplot2")
grid.newpage()
pushViewport(viewport(layout = grid.layout(6, 2)))
for (s in 1:2)
{
for (i in 1:6)
{
p <- qplot(dat[dat$sex==c("male","female")[s],i+1]+0.5, geom="histogram", binwidth=1)
print(p, vp = viewport(layout.pos.row = i, layout.pos.col = s))
}
}
Aber ich denke, es ist ein einfacher Weg, dies zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie versuchen
grid.arrange()
von der gridExtra Paket; d.h., speichern Sie Ihre Diagramme in einer Liste (sagenqplt
), und verwenden SieAndere Ideen: verwenden Sie facetting in ggplot2 (
sex*variable
), durch die Berücksichtigung eines Daten.Bild anzeigen (verwenden Siemelt
).Nebenbei, es wäre besser, verwenden stacked barchart oder Cleveland dotplot für die Anzeige von Elementen-Antwort Frequenzen, IMO. (Ich gab Ihnen einige Ideen auf CrossValidated.)
Der Vollständigkeit halber, hier sind einige Umsetzung Ideen:
Follow-up auf chl Beispiel - hier ist, wie zu duplizieren base-Grafik mit ggplot. Ich würde beherzigen seinen Rat in suchen, um dotplots als gut:
ggplot(subset(melt(dat), as.numeric(variable)==i), aes(x=as.factor(value))) + geom_bar() + facet_grid (. ~ sex) + xlab("")
(innerhalb einer for-Schleife wrt. Ebenen dervariable
). Konvertierenvalue
zu einem Faktor vermeidet die lärmenden x-Einheiten.value
Faktor. Ich war nicht sicher, ob die OPs vollen Datenbestand würde gefüllt haben, die peinliche Rohlinge ist oder nicht, aber guter trick haben Sie Ihren ärmel hoch, unabhängig.