R ggplot упорядочение баров в "барплотоподобном" сюжете - PullRequest
9 голосов
/ 01 августа 2011

Это мой код:

ggplot(tmp, aes(x=tmp$V2, y=-log10(tmp$V3), fill=tmp$V1)) +
geom_bar(stat="identity") +
coord_flip()

Теперь я хотел бы создать тот же график, что и выше, но где значения внутри каждой "группы" отсортированы. Нечто похожее на это.

Ответы [ 3 ]

9 голосов
/ 01 августа 2011

Вы можете заказать переменную, преобразовав ее в множитель.

> head(d)
                     V1                                     V2       V3
1 GO Biological Process  regulation of lipid metabolic process 1.87e-35
2 GO Biological Process            acute inflammatory response 3.21e-37
3 GO Biological Process           response to insulin stimulus 1.05e-38
4 GO Biological Process              steroid metabolic process 4.19e-39
5 GO Biological Process          cholesterol metabolic process 1.19e-40
6 GO Biological Process cellular response to chemical stimulus 5.87e-42

> d$V4 <- factor(d$V2, levels=d$V2) # convert V2 into factor
> head(d)
                     V1                                     V2       V3                                     V4
1 GO Biological Process  regulation of lipid metabolic process 1.87e-35  regulation of lipid metabolic process
2 GO Biological Process            acute inflammatory response 3.21e-37            acute inflammatory response
3 GO Biological Process           response to insulin stimulus 1.05e-38           response to insulin stimulus
4 GO Biological Process              steroid metabolic process 4.19e-39              steroid metabolic process
5 GO Biological Process          cholesterol metabolic process 1.19e-40          cholesterol metabolic process
6 GO Biological Process cellular response to chemical stimulus 5.87e-42 cellular response to chemical stimulus

> # plot
> ggplot(d, aes(V4, -log10(V3), fill=V1)) + geom_bar() + coord_flip()

вот дополнительная информация: http://kohske.wordpress.com/2010/12/29/faq-how-to-order-the-factor-variables-in-ggplot2/

9 голосов
/ 01 августа 2011
ggplot(df, aes(reorder(x,y),y)) + geom_bar()

Часть, которую вы ищете, переупорядочена (x, y). Но если бы вы могли показать нам ваш текущий вызов ggplot (), мы могли бы быть более конкретными, так как reorder () не единственный метод.

Для сортировки такого типа вам может понадобиться использовать relevel (), но это зависит от ваших данных.

Вы также можете добавить еще один столбец в ваш data.frame (), который будет действовать как переменная сортировки, вручную или автоматически, и основывать свой вызов reorder () на этом.

4 голосов
/ 03 августа 2011

Предполагая, что данные, предоставленные Беном, находятся в файле CSV с именем data.csv:

d <- read.csv('data.csv', header = F)
d$V2 <- factor(d$V2, levels=d[order(d$V1, -d$V3), ]$V2) #reorder by grp/value
ggplot(d, aes(x=V2, y=-log10(V3), fill=V1)) + geom_bar() + coord_flip()

Этот метод немного более общий по сравнению с ответом от Кохске и не требует, чтобы CSVбыть отсортирован (изменение порядка строк в файле CSV по-прежнему будет отображать правильный график).

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