Nicht verwendete Ebenen in Facetten mit ggplot2 löschen [closed]


19

Ist es möglich, Ebenen zu löschen, die nicht in ggplot2s-Facetten verwendet werden? Das ist mein Code:

tab = as.data.frame(cbind(groups = mtcars$cyl, names = row.names(mtcars), val = mtcars$mpg, N = mtcars$disp))
tab$N = as.numeric(tab$N)

ggplot(tab, aes(names,val)) + 
geom_point() + coord_flip() + 
theme_bw() + 
facet_grid(groups ~ ., drop=TRUE)#, scales="free", as.table=F, space="free")

Ich habe den drop=TSchalter ausprobiert , aber es hilft nicht. Was mache ich falsch?


Für reine Programmierfragen (keine Statistiken) wie diese migrieren Sie bitte zu StackOverflow
smci

Antworten:


27

Ihre Beispieldaten haben keine ungenutzten Ebenen zum Löschen. Überprüfen Sie das Verhalten in diesem Beispiel:

dat <- data.frame(x = runif(12),
                  y = runif(12),
                  grp1 = factor(rep(letters[1:4],times = 3)),
                  grp2 = factor(rep(LETTERS[1:2],times = 6)))

levels(dat$grp2) <- LETTERS[1:3]

ggplot(dat,aes(x = x,y = y)) + 
    facet_grid(grp1~grp2,drop = FALSE) + 
    geom_point()

ggplot(dat,aes(x = x,y = y)) + 
    facet_grid(grp1~grp2,drop = TRUE) + 
    geom_point()

Möglicherweise möchten Sie ändern, welche Faktoren in jeder Facette auf der vertikalen Achse dargestellt werden. In diesem Fall möchten Sie das scalesArgument festlegen und Folgendes verwenden facet_wrap:

ggplot(tab, aes(names,val)) + 
    geom_point() + coord_flip() + 
    theme_bw() + 
    facet_wrap(~groups,nrow = 3,scales = "free_x")

Oh, ich verstehe jetzt, was es tut. Meine Absicht war es, nur die Ebenen in jeder Facette zu zeichnen, die tatsächlich nach der Facette gruppiert sind. Wie mit meinem Tab Beispiel dotchart(as.numeric(tab$val), labels=tab$names, groups=tab$groups). Ist es möglich?
mrrrau

@mrrrau Ja, siehe meine Bearbeitung.
Joran

21
Für zukünftige Leser werden dropalle Faktorstufen gelöscht, die in keiner Facette des Plots verwendet wurden, während scalesalle Faktorstufen gelöscht werden, die in einer bestimmten Facette des Plots nicht verwendet wurden. Es hat eine Weile gedauert, bis ich diesen Beitrag verstanden habe. Ich dachte, ich würde das hier klären, um jemand anderem die Mühe zu ersparen.
Jake Fisher

@JakeFisher Danke für den Hinweis! Sehr hilfreich!
Steven
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.