Вопрос по r, ggplot2 – Как я могу удалить пустые факторы из фасетов ggplot2?

15

Я пытаюсь изменитьпример простого леса построить путем введения граней в соответствии с факторной переменной.

Предполагая данные этой структуры:

test <- structure(list(characteristic = structure(c(1L, 2L, 3L, 1L, 2L
), .Label = c("Factor1", "Factor2", "Factor3"), class = "factor"), 
    es = c(1.2, 1.4, 1.6, 1.3, 1.5), ci_low = c(1.1, 1.3, 1.5, 
    1.2, 1.4), ci_upp = c(1.3, 1.5, 1.7, 1.4, 1.6), label = structure(c(1L, 
    3L, 5L, 2L, 4L), .Label = c("1.2 (1.1, 1.3)", "1.3 (1.2, 1.4)", 
    "1.4 (1.3, 1.5)", "1.5 (1.4, 1.6)", "1.6 (1.5, 1.7)"), class = "factor"), 
    set = structure(c(1L, 1L, 1L, 2L, 2L), .Label = c("H", "S"
    ), class = "factor")), .Names = c("characteristic", "es", 
"ci_low", "ci_upp", "label", "set"), class = "data.frame", row.names = c(NA, 
-5L))

И запустить код:

p <- ggplot(test, aes(x=characteristic, y=es, ymin=ci_low, ymax=ci_upp)) + geom_pointrange() +
  coord_flip() + geom_hline(aes(x=0), lty=2) + 
  facet_wrap(~ set, ncol = 1) +
  theme_bw() + 
  opts(strip.text.x = theme_text())

Производит вывод так:

enter image description here

Пока все хорошо. Однако я хотел бы избавиться от пустого уровня Factor3 с моей нижней панели и не могу найти способ сделать это. Есть ли способ сделать это?

Спасибо за помощь.

Когда я ссылался на R, я перестал спрашивать "Есть ли ..." и начал спрашивать "Как я могу ..."install.packages("fortunes"); library(fortunes); fortune("Yoda") Tyler Rinker

Ваш Ответ

2   ответа
13

scales = "free" как в:

p <- ggplot(test, aes(x=characteristic, y=es, ymin=ci_low, ymax=ci_upp)) + geom_pointrange() +
  coord_flip() + geom_hline(aes(x=0), lty=2) + 
  facet_wrap(~ set, ncol = 1, scales="free") +
  theme_bw() + 
  opts(strip.text.x = theme_text())

p

Который производит:

enter image description here

РЕДАКТИРОВАТЬ: я на самом деле думаю, что мне нравитсяdrop = TRUE аргумент лучше для этого решения, как в:

p <- ggplot(test, aes(x=characteristic, y=es, ymin=ci_low, ymax=ci_upp)) + 
  geom_pointrange() +
  coord_flip() + geom_hline(aes(x=0), lty=2) + 
  facet_wrap(~ set, ncol = 1,  drop=TRUE) +
  theme_bw() + 
  opts(strip.text.x = theme_text())

p
Error: User Rate Limit Exceededspace = "free"Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded radek
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededspace = "free"Error: User Rate Limit Exceededfacet_gridError: User Rate Limit Exceededscales = 'free_x'Error: User Rate Limit Exceeded radek
20

EDIT Обновлено до ggplot2 0.9.3

Вот еще одно решение. Оно используетfacet_grid а такжеspace = "free"; также он используетgeom_point() а такжеgeom_errorbarh()и, следовательно, нет необходимостиcoord.flip(), Кроме того, метки для отметок по оси X отображаются только на нижней панели. В приведенном ниже кодеtheme Команда не обязательна - она используется для поворота текста полосы, чтобы он отображался горизонтально. С использованиемtest Из приведенного выше кадра данных следующий код должен выдавать то, что вы хотите:

library(ggplot2)

p <- ggplot(test, aes(y = characteristic, x = es, xmin = ci_low, xmax = ci_upp)) +
   geom_point() +
   geom_errorbarh(height = 0) +
   facet_grid(set ~ ., scales = "free", space = "free") +
   theme_bw() +
   theme(strip.text.y = element_text(angle = 0))

p

Решение основано на примере на странице 124 в книге Уикхема ggplot2.

Похожие вопросы