如何让ggplot柱状图按定量变量降序排列?
解决ggplot柱状图按RQ_gapdh降序排列的问题
你之前的尝试错误地修改了y轴参数,排序的核心是调整x轴gen的因子顺序,而非y轴数值。以下是两种可行的解决方案:
方案1:全局按RQ_gapdh均值降序排列
如果希望所有分面的基因保持统一的降序顺序(基于每个基因的RQ_gapdh均值),只需在reorder的数值参数前加负号,即可将默认的升序改为降序:
p1v <- ggplot(data = df_plot2, aes(x = reorder(gen, -RQ_gapdh), y = RQ_gapdh, ymin = after_scale(1), fill = Color)) + geom_bar(stat = "identity", width=.5)+ scale_fill_manual(values = c("indianred1", "olivedrab3" )) + labs(x = "Genes", y = expression(2^-ddCt~"value"), title = "Gene expression", subtitle = "1 year post-intervention")+ # 修正原代码的subtitles拼写错误 guides(fill = F) + coord_flip()+ facet_wrap(~grup_int, labeller = labeller(grup_int = c("1" = "Olive oil", "2" = "Nuts", "3" = "Low-fat diet")))
reorder(gen, -RQ_gapdh)会自动计算每个基因对应的RQ_gapdh均值,并按均值从高到低排列基因。
方案2:分面内独立降序排列
如果需要每个干预组(分面)内的基因各自按RQ_gapdh降序排列,可以结合dplyr和forcats包预处理数据:
library(dplyr) library(forcats) # 按分组对基因排序 df_plot2_sorted <- df_plot2 %>% group_by(grup_int) %>% mutate(gen = fct_reorder(gen, -RQ_gapdh)) %>% ungroup() # 绘制图形 p1v <- ggplot(data = df_plot2_sorted, aes(x = gen, y = RQ_gapdh, ymin = after_scale(1), fill = Color)) + geom_bar(stat = "identity", width=.5)+ scale_fill_manual(values = c("indianred1", "olivedrab3" )) + labs(x = "Genes", y = expression(2^-ddCt~"value"), title = "Gene expression", subtitle = "1 year post-intervention")+ guides(fill = F) + coord_flip()+ facet_wrap(~grup_int, scales = "free_x", # 开启x轴自由缩放,避免空因子显示 labeller = labeller(grup_int = c("1" = "Olive oil", "2" = "Nuts", "3" = "Low-fat diet")))
额外修正说明
原代码中labs()的subtitles是拼写错误,正确参数名是subtitle;y轴的指数表达式建议用expression()包裹,以正确渲染上标格式。
内容的提问来源于stack exchange,提问作者Javier Hernando
相关产品推荐
相关产品推荐

