geom_bar()函数绘制条形图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了geom_bar()函数绘制条形图相关的知识,希望对你有一定的参考价值。

参考技术A 使用geom_bar()函数绘制条形图,条形图的高度通常表示两种情况之一:每组中的数据的个数,或数据框中列的值,高度表示的含义是由geom_bar()函数的参数stat决定的,stat在geom_bar()函数中有两个有效值:count和identity。默认情况下,stat="count",这意味着每个条的高度等于每组中的数据的个数,并且,它与映射到y的图形属性不相容,所以,当设置stat="count"时,不能设置映射函数aes()中的y参数。如果设置stat="identity",这意味着条形的高度表示数据数据的值,而数据的值是由aes()函数的y参数决定的,就是说,把值映射到y,所以,当设置stat="identity"时,必须设置映射函数中的y参数,把它映射到数值变量。

geom_bar()函数的定义是:

参数注释:

关于stat参数,有三个有效值,分别是count、identity和bin:

stat="identity",表示不要计数,而是就使用数据本身作为频数。

按值重新排序 geom_bar ggplot2 中的条形图

【中文标题】按值重新排序 geom_bar ggplot2 中的条形图【英文标题】:Reorder bars in geom_bar ggplot2 by value 【发布时间】:2021-11-21 14:30:45 【问题描述】:

我正在尝试制作一个条形图,其中的情节从miRNA 最高valuemiRNA 最低。为什么我的代码不起作用?

> head(corr.m)

        miRNA         variable value
1    mmu-miR-532-3p      pos     7
2    mmu-miR-1983        pos    75
3    mmu-miR-301a-3p     pos    70
4    mmu-miR-96-5p       pos     5
5    mmu-miR-139-5p      pos    10
6    mmu-miR-5097        pos    47

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

【问题讨论】:

【参考方案1】:

您的代码工作正常,除了条形图是从低到高排序的。当你想从高到低排序时,你必须在value之前添加一个-sign:

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

给出:


使用的数据:

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"))

【讨论】:

由于某种原因它没有在我的情节中被订购 @user3741035 奇怪。您是在上面提供的示例数据集上还是在整个数据集上使用了它? 您使用的是哪个版本的 R & ggplot?您是否还可以提供一个更大的样本数据集(最好为variable 提供多个值)? 找到了解决方案:我加载了库(gplots),结果搞砸了 @maycca 它给了我正确的结果(在 OSX 10.10.4 / Windows 7、R 3.2.3 和 ggplot2 2.1.0 上)。也许你应该从一个新的会话开始?【参考方案2】:

除了@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") 

【讨论】:

以上是关于geom_bar()函数绘制条形图的主要内容,如果未能解决你的问题,请参考以下文章

绘制带有分面换行的条形图

按值重新排序 geom_bar ggplot2 中的条形图

按值重新排序 geom_bar ggplot2 中的条形图

按值重新排序 geom_bar ggplot2 中的条形图

用条形图和点图来排序标签

geom_bar ggplot2 具有正值和负值的堆叠、分组条形图 - 金字塔图