在geom_bar ggplot2中重新排序条形图

时间:2014-09-04 11:11:23

标签: r ggplot2

我正在尝试制作一个条形图,其中从最miRNA的{​​{1}}到最低value的{​​{1}}订购地块。为什么我的代码不起作用?

miRNA

3 个答案:

答案 0 :(得分:169)

您的代码工作正常,但条形图从低到高排序。如果您想要从高到低订购条形图,则必须在-之前添加value符号:

ggplot(corr.m, aes(x = reorder(miRNA, -value), y = value, fill = variable)) + 
  geom_bar(stat = "identity")

给出:

enter image description here


使用过的数据:

corr.m <- structure(list(miRNA = structure(c(5L, 2L, 3L, 6L, 1L, 4L), .Label = c("mmu-miR-139-5p", "mmu-miR-1983", "mmu-miR-301a-3p", "mmu-miR-5097", "mmu-miR-532-3p", "mmu-miR-96-5p"), class = "factor"),
                         variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = "pos", class = "factor"),
                         value = c(7L, 75L, 70L, 5L, 10L, 47L)),
                    class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6"))

答案 1 :(得分:1)

除了@Jaap 的回答之外,还有另外两种排列情节的方法:

1:通过使用 desc 参数作为值:

ggplot(corr.m, aes(x = reorder(miRNA, desc(value)), y = value, fill = variable)) + 
   geom_bar(stat = "identity")

2:通过重新调整 miRNA 因子并省略 reorder 参数:

corr.m %>%
   arrange(desc(value)) %>%
   mutate(miRNA = factor(miRNA, levels = unique(miRNA))) %>% 
ggplot(aes(x = miRNA, y = value, fill = variable)) + 
   geom_bar(stat = "identity") 

答案 2 :(得分:0)

您可以使用reorder()函数沿x轴对变量重新排序。但是,有时ggplot不会收听重新排序。这通常是因为以错误的顺序添加了图的其他图层。如果您有复杂的绘图并且reorder()不会影响结果,请尝试暂时删除或静音其他功能,然后将它们一个接一个地添加。

ggplot(aes(x=reorder(myx, -myy), y=myy), data=mydf) + geom_bar(stat="identity")