Как удалить пустые факторы из граней ggplot2?
Я пытаюсь изменить пример простого леса, введя графы в соответствии с факторной переменной.
Предполагая данные этой структуры:
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 от моей нижней панели и не могу найти способ сделать это. Есть ли способ сделать это?
Спасибо за помощь.
Ответы
Ответ 1
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 в книге Wickham ggplot2.
Ответ 2
Используйте 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]()
EDIT: Я действительно считаю, что мне нравится аргумент 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