2013-02-22 2 views
5

Я хочу сделать 2x4 массив графиков, которые показывают, что распределения меняются со временем. По умолчанию ggplot расположение с facet_wrap состоит в том, что верхняя строка имеет ряд 1 & 2, вторая строка имеет ряд 3 & 4 и т. Д. Я хотел бы изменить это так, чтобы первый столбец имел ряды по порядку (1-> 2-> 3-> 4), а затем второй столбец имеет следующие 4 серии. Таким образом, ваш глаз может сравнивать сразу смежные распределения во времени по вертикали (как я думаю, они должны быть).Как изменить порядок строк в столбцы с помощью facet_wrap?

+0

Изменить уровни оберточного factor..see [это] (http://stackoverflow.com/questions/5490638/how-to-change-the -order-of-facet-labels-in-ggplot-custom-facet-wrap-labels) – agstudy

+0

Я понимаю, что могу это сделать, но когда уровни - это только точки времени, это немного клочья, вам не кажется? Уровни будут примерно такими (1,10,2,20,3,30,4,40, ...) и так далее. –

+2

Я не понимаю вашу точку зрения. можете ли вы представить воспроизводимый пример, пожалуйста. – agstudy

ответ

4

Похоже, что вам нужно сделать это с фактором упорядочения до начала вызова facet_wrap:

fac <- factor(fac, levels=as.character(c(1, 10, 2, 20, 3, 30, 4, 40))) 

по умолчанию как/таблицы в facet_wrap ИСТИНА, который собирается поставить самое низкое значение ("1 «в этом случае) в левом верхнем углу и самое высокое значение (« 40 »в примере выше) в нижнем правом углу. Итак:

pl + facet_wrap(~fac, ncol=2, nrow=4) 

Ваши комментарии предполагают, что вы работаете с числовыми переменными класса. (Ваши комментарии по-прежнему не дают рабочего примера, и вы, кажется, думаете, что это наша ответственность, а не ваша. Откуда вы приобретаете такие понятия о праве?) Это должно создать фактор, который может быть «основным столбцом», упорядоченным либо с помощью числа входной коэффициент:

> ss <- 1:8; factor(ss, levels=ss[matrix(ss, ncol=2, byrow=TRUE)]) 
[1] 1 2 3 4 5 6 7 8 
Levels: 1 3 5 7 2 4 6 8 

с другой стороны, я могу думать о тех ситуациях, когда это может быть эффективный подход:

> ss <- 1:8; factor(ss, levels=ss[matrix(ss, nrow=2, byrow=TRUE)]) 
[1] 1 2 3 4 5 6 7 8 
Levels: 1 5 2 6 3 7 4 8 
+0

К сожалению, я думаю, что это единственный способ сделать это. Мне это не нравится, потому что это не очень элегантно. Ну что ж. Не могу победить их всех. Благодарю. –

+2

Ваш рабочий корпус должен быть другим, поскольку порядок по умолчанию в примере, который я предложил, такой же, как я создал. Лучшие ответы всегда достигаются наибольшим количеством информации в вопросе. –

+0

Вся необходимая информация, которую я дал. facet_wrap (~ время), где time = 1,2,3,4 ... Это будет отображаться по строкам сначала, а затем по столбцам по умолчанию. Вы говорите, что у вас что-то отличное от того, где он сначала разбивает столбцы, а затем строки? –

1

Используйте параметр направления dir к facet_wrap(). По умолчанию находится в горизонтальном положении, и это может быть переключено на вертикальный:

# Horizontally 
ggplot(mtcars, aes(x=hp, y=mpg)) + geom_point() + facet_wrap(~ cyl, ncol=2) 

# Vertically 
ggplot(mtcars, aes(x=hp, y=mpg)) + geom_point() + facet_wrap(~ cyl, ncol=2, dir="v") 
Смежные вопросы