按值重新排序 geom_bar ggplot2 中的条形图
Posted
技术标签:
【中文标题】按值重新排序 geom_bar ggplot2 中的条形图【英文标题】:Reorder bars in geom_bar ggplot2 by value 【发布时间】:2021-11-21 14:30:45 【问题描述】:我正在尝试制作一个条形图,其中的情节从miRNA
最高value
到miRNA
最低。为什么我的代码不起作用?
> 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 ggplot2 中的条形图的主要内容,如果未能解决你的问题,请参考以下文章
R语言ggplot2可视化时避免geom_bar对x轴进行排序实战:直接对因子变量进行提前排序后再进行可视化使用scale_x_discrete函数限定因子顺序
在 R 中保持 geom_bar() ggplot2 的数据顺序