Зниження невикористаних рівнів у гранях за допомогою ggplot2 [закрито]


19

Чи можна знизити рівні, які не використовуються в гранях ggplot2s? Це мій код:

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")

Я спробував drop=Tперемикач, але це не допомагає. Що я роблю неправильно?


Для таких питань програмування (а не статистики), будь ласка, перейдіть до StackOverflow
smci

Відповіді:


27

У ваших прикладних даних просто немає жодних невикористаних рівнів для падіння. Перевірте поведінку в цьому прикладі:

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()

Можливо, ви хочете змінити, які чинники будуються на вертикальній осі в кожній грані, і в цьому випадку ви хочете встановити scalesаргумент і використовувати facet_wrap:

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

О, я бачу, що це робить. Мій намір полягав у тому, щоб накреслити лише ті рівні у кожній грані, які насправді згруповані за фаскою. Як, використовуючи мій приклад вкладки, dotchart(as.numeric(tab$val), labels=tab$names, groups=tab$groups). Це можливо?
mrrrau

@mrrrau Так, дивіться мою редагування.
joran

21
Для майбутніх читачів dropвипадає будь-який рівень фактора, який не використовувався в будь-якій грані сюжету, в той час як scalesзнижується будь-який рівень фактора, який не використовувався в певній грані сюжету. Це знадобило мені час, щоб зрозуміти цю посаду, тому я подумав, що я уточнив тут, щоб врятувати комусь іншого неприємності.
Джейк Фішер

@JakeFisher Дякуємо, що вказали на це! Досить корисно!
Стівен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.