порядок упорядочения сложенного geom_bar в ggplot2 - PullRequest
2 голосов
/ 19 апреля 2011

Я рисую некоторые круговые диаграммы, используя facet_wrap и coord_polar, скажем, у меня есть факторы с последовательностью A, B, C. D, для оси x и с использованиемfacet_wrap (скажем, для 3 графиков) и coord_polar.У меня будет 3 пирога (пирог X, Y, Z) с A, B, C. D по часовой стрелке.

Проблема возникает, когдаЯ хочу изменить level коэффициента индивидуально для каждого аспекта, например:

   A  B  C  D
X 10 20 30 40
Y 20 30 40 10
Z 30 40 10 20

Я хочу:

pie X, который будет иметь вид: A, B, C. D по часовой стрелке

круговой Y, который будет иметь вид: D, A, B. C по часовой стрелке

круговой Z, чтобы бытьрасположены как: C, D, A. B по часовой стрелке

Могу ли я сделать это в ggplot2?Спасибо.

1 Ответ

7 голосов
/ 19 апреля 2011

Подход к сетке / окну просмотра будет работать примерно так. Сначала мы приводим некоторые данные в соответствие с тем, что вы показываете. Мы поворачиваем уровни фактора для каждого из X, Y и Z, как вы указали в вопросе

## Your data
dat <- data.frame(X = factor(rep(LETTERS[1:4], times = c(10,20,30,40)), 
                             levels = LETTERS[1:4]),
                  Y = factor(rep(LETTERS[1:4], times = c(20,30,40,10)),
                             levels = LETTERS[c(4,1:3)]),
                  Z = factor(rep(LETTERS[1:4], times = c(30,40,10,20)),
                             levels = LETTERS[c(3:4,1:2)]))

Затем мы создаем отдельные круговые диаграммы, вращая те же scale_fill_manual() цвета в том же порядке, в котором мы вращали уровни в данных, dat (с извинениями за неприятные цвета - как получить первый n цвета, которые ggplot будет использовать нормально?):

p1 <- ggplot(dat, aes(x = factor(1), fill = factor(X))) + 
          geom_bar(width = 1) + coord_polar(theta = "y") +
          scale_fill_manual(value = c("red","green","yellow","blue"))
p2 <- ggplot(dat, aes(x = factor(1), fill = factor(Y))) + 
          geom_bar(width = 1) + coord_polar(theta = "y") +
          scale_fill_manual(value = c("red","green","yellow","blue")[c(4,1:3)])
p3 <- ggplot(dat, aes(x = factor(1), fill = factor(Z))) + 
          geom_bar(width = 1) + coord_polar(theta = "y") +
          scale_fill_manual(value = c("red","green","yellow","blue")[c(3:4,1:2)])

Теперь нам нужна новая страница для черчения и надеть на нее макет 2x2:

grid.newpage()
pushViewport(viewport(layout = grid.layout(2,2)))

Пользовательская функция позволяет упростить настройку строки / столбца для каждого последующего графика:

vplayout <- function(x, y) {
    viewport(layout.pos.row = x, layout.pos.col = y)
}

Далее мы просто выводим каждый объект сохранения ggplot на правильный видовой экран, как указано аргументом vp:

print(p1, vp = vplayout(1,1))
print(p2, vp = vplayout(1,2))
print(p3, vp = vplayout(2,1))

Приведенный выше код сетки был взят со страницы 94 в превосходной книге Хэдли о ggplot.

Это производит:

pie charts and viewport layout

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...