Ich habe eine große Anzahl von Datenreihen, die ich mit kleinen Vielfachen plotten möchte. Eine Kombination von ggplot2 und facet_wrap
macht was ich will, typischerweise ergibt sich daraus ein schöner kleiner Block von 6 x 6 Facetten. Hier ist eine einfachere Version:Wie man Spalten in facet_grid angibt ODER wie man Beschriftungen in facet_wrap ändert
Das Problem ist, dass ich nicht eine ausreichende Kontrolle über die Etiketten in Facette Streifen verfügen. Die Namen der Spalten im Datenrahmen sind kurz und ich möchte sie so behalten, aber die Beschriftungen in den Facetten sollten aussagekräftiger sein. Ich kann facet_grid
verwenden, so dass ich die Funktion labeller
nutzen kann, aber dann scheint es keine direkte Möglichkeit zu geben, die Anzahl der Spalten anzugeben, und eine lange Reihe von Facetten funktioniert einfach nicht für diese spezielle Aufgabe. Fehle ich etwas Offensichtliches?
Frage: Wie kann ich die Facette Etiketten ändern, wenn facet_wrap verwenden, ohne die Spaltennamen zu ändern? Alternativ, wie kann ich die Anzahl der Spalten und Zeilen bei der Verwendung von facet_grid angeben?
Code für ein vereinfachtes Beispiel folgt. Im wirklichen Leben habe ich es mit mehreren Gruppen zu tun, die jeweils Dutzende von Datenreihen enthalten, von denen sich jede häufig ändert, so dass jede Lösung automatisiert werden müsste, anstatt sich auf die manuelle Zuweisung von Werten zu verlassen.
require(ggplot2)
require(reshape)
# Random data with short column names
set.seed(123)
myrows <- 30
mydf <- data.frame(date = seq(as.Date('2012-01-01'), by = "day", length.out = myrows),
aa = runif(myrows, min=1, max=2),
bb = runif(myrows, min=1, max=2),
cc = runif(myrows, min=1, max=2),
dd = runif(myrows, min=1, max=2),
ee = runif(myrows, min=1, max=2),
ff = runif(myrows, min=1, max=2))
# Plot using facet wrap - we want to specify the columns
# and the rows and this works just fine, we have a little block
# of 2 columns and 3 rows
mydf <- melt(mydf, id = c('date'))
p1 <- ggplot(mydf, aes(y = value, x = date, group = variable)) +
geom_line() +
facet_wrap(~ variable, ncol = 2)
print (p1)
# Problem: we want more descriptive labels without changing column names.
# We can change the labels, but doing so requires us to
# switch from facet_wrap to facet_grid
# However, in facet_grid we can't specify the columns and rows...
mf_labeller <- function(var, value){ # lifted bodily from the R Cookbook
value <- as.character(value)
if (var=="variable") {
value[value=="aa"] <- "A long label"
value[value=="bb"] <- "B Partners"
value[value=="cc"] <- "CC Inc."
value[value=="dd"] <- "DD Company"
value[value=="ee"] <- "Eeeeeek!"
value[value=="ff"] <- "Final"
}
return(value)
}
p2 <- ggplot(mydf, aes(y = value, x = date, group = variable)) +
geom_line() +
facet_grid(~ variable, labeller = mf_labeller)
print (p2)
Dies ist ein [offenes Problem] (https://github.com/hadley/ggplot2/issues/25), aber in Ihrem speziellen Fall (einfaches Umbenennen, kein bquote oder plotmath) können Sie die Variablen einfach vorher umbenennen. – baptiste
@baptiste Ich war mir nicht bewusst, dass es ein offenes Problem war (und das ist seit zwei Jahren so, wahrscheinlich wird sich das wahrscheinlich bald nicht ändern). Suspect hadley braucht mehr Studenten, um das Projekt zu beginnen! – SlowLearner
oder R-savvy Freiwillige – baptiste